파이썬 초기화 작업 방법을 이해하려면 약간의 도움이 필요합니다. 필드/변수로 다른 클래스 (Foo) 클래스 (Bar) 있습니다. 이 변수를 Bar (__init__ 클래스가 아님)에서 직접 초기화하려고하면 Bar의 모든 인스턴스가 동일한 Foo를 가리 킵니다. 그러나 Bar2에서와 같이 __init__ 메서드가있는 경우 각 Bar2 인스턴스에는 고유 한 Foo 인스턴스가 있습니다. 여기서 무슨 일이 일어나고있는거야?__init__ 외부 필드 초기화
class Foo():
number = 0
class Bar():
foo = Foo()
class Bar2():
foo = None
def __init__(self):
self.foo = Foo()
first = Bar()
second = Bar()
print "Bar"
print first
print second
print first.foo
print second.foo
first = Bar2()
second = Bar2()
print "\nBar2"
print first
print second
print first.foo
print second.foo
예컨대 출력 의지 할 :
Bar
<\__main__.Bar instance at 0x025B2AF8>
<\__main__.Bar instance at 0x025B2B20>
<\__main__.Foo instance at 0x004A3AA8>
<\__main__.Foo instance at 0x004A3AA8>
Bar2
<\__main__.Bar2 instance at 0x025B2B48>
<\__main__.Bar2 instance at 0x025B2AF8>
<\__main__.Foo instance at 0x025B2B70>
<\__main__.Foo instance at 0x025B2B98>
같은 푸 인스턴스를 참조 할 바를 두 인스턴스 사용. 왜?
편집:이 두 번 바을 first.foo인쇄에 오류가 수정되었습니다. 결과 동작은 여전히 출력에서 볼 수 있습니다.
Python 2.x에서'class Foo() :'라고 쓰지 마십시오. 그러면 이전 스타일의 클래스가 생성됩니다. 당신은 거의 그것을 원하지 않을 것입니다. 대신, [새 스타일 클래스] (http://docs.python.org/reference/datamodel.html#newstyle)가 필요합니다. 이를 위해'class Foo (object) :'라고 쓰십시오. – pillmuncher
그 점에 대해 나는 몰랐다. 실제로 파이썬과의 첫 만남 이전에 변경이 있었기 때문에 나는 알고 있었어야합니다. –