저는 아직 Python을 처음 접했고 Java에서 온 OO 환경을 제공합니다.Python 클래스 범위 및 목록
class MyClass():
mylist = []
mynum = 0
def __init__(self):
# populate list with some value.
self.mylist.append("Hey!")
# increment mynum.
self.mynum += 1
a = MyClass()
print a.mylist
print a.mynum
b = MyClass()
print b.mylist
print b.mynum
이 다음과 같은 출력 결과를 실행 : 그래서 내가 주어진, 다음 코드 나에게 매우 이상한 행동을하네요 파이썬으로 작성한 몇 가지 코드가 분명히
['Hey!']
1
['Hey!', 'Hey!']
1
을, 나는 기대 같은 정확한 데이터와 똑같은 결과를 가져 오는 클래스 변수 ... 어디서나 찾을 수없는 것은 문자열이나 숫자를 말하는 것과 다른 목록을 만드는 것입니다. 왜리스트는 같은 목록을 참조하고 있습니까? 후속 인스턴스에서의 첫 번째 인스턴스화? 분명히 나는 어떤 종류의 범위 메카닉이나리스트 생성 메카닉을 오해하고있을 것입니다.
여전히 중요한 부분을 놓치고 있습니다. @ 켄의 대답을 참조하십시오. 'self.mynum + = 1'은'self.mynum = self.mynum + 1'으로 확장됩니다. 이 작업이 실행되면 먼저 오른쪽이 평가됩니다. 'self.mynum'은 인스턴스에서 mynum을 찾아보고 (적어도'__init__'가 처음 호출 될 때) 그것을 찾지 못하고 클래스에서 mynum을 찾는다. 그래서 오른쪽에있는'self.mynum'은'MyClass.mynum'의 값으로 평가됩니다. 그 값은 이제'self '에 할당됩니다.여기서 인스턴스 변수를 참조합니다. –