2011-03-22 1 views
0

은 내가 SomeClass초기화 나는이 같은 카운터의 값을 취득 할 때

x = SomeClass() 

에 대한 인스턴스 x을 만들이

class SomeClass: 
    def doSomething(self): 
     self.counter = 50 

같은 클래스가 속성 : x.counter 내가 얻을 다음 오류 -

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: SomeClass instance has no attribute 'counter' 

하지만 멤버 함수를 호출 한 후 x.doSomething()을 입력 한 다음 데이터 속성을 찾으면됩니다.

>>> x.doSomething() 
>>> x.counter 
50 

왜 이렇게 생겼습니까? 인스턴스가 생성되는 즉시 모든 데이터 속성을 사용할 수 있습니까?

감사합니다.

답변

7

아니요, self.counter 만 작성하면 doSomething()이 호출됩니다. 파이썬에서 인스턴스 속성은 동적이며 런타임에 만들 수 있습니다. 객체의 생성에서 self.counter 사용할 수있는하려면 생성자에서 초기화를 넣어 : doSomething가 호출 될 때까지 그 값이 None 수 있어도

class SomeClass: 
    def __init__(self): 
     self.counter = None 
    def doSomething(self): 
     self.counter = 50 

지금 SomeClass의 모든 인스턴스는, 처음부터 self.counter 사용할 수있을 것이다. 자연스럽게, 당신이 관심있는 정확한 의미를 구현할 수 있도록이 테마에 많은 변형이 있습니다.

+0

고마워. 이것을 따르는 것이 좋습니다. 아니면'__init__'에서 모든 데이터 속성을 초기화해야합니까? – bdhar

+0

이전 댓글에서 내 질문에 대한 답변을 수정 한 것 같습니다. 감사. – bdhar

+1

@bdhar : 뭔가 이상한 일을하지 않는 한, 모든 인스턴스 속성을 생성자에서 초기화하도록 권장합니다. –