2010-05-25 3 views
3
class A(): 

    def __init__(self): 
     self.__var = 5 

    def get_var(self): 
     return self.__var 

    def set_var(self, value): 
     self.__var = value 

    var = property(get_var, set_var) 

a = A() 
a.var = 10 
print a.var == a._A__var 

왜 결과가 False인지 설명 할 수 있습니까?파이썬 개인 속성

답변

4

property 데코레이터는 새로운 스타일의 클래스에서만 작동합니다. 파이썬 2.X에서, 당신은 object 클래스를 확장 할 수 있습니다 새로운 스타일의 클래스의 동작없이

class A(object): 

    def __init__(self): 
     self.__var = 5 

    def get_var(self): 
     return self.__var 

    def set_var(self, value): 
     self.__var = value 

    var = property(get_var, set_var) 

을 할당 a.var = 10은 새로운 멤버에 새로운 값 (10가) a.var 속성에 바인딩합니다.

+0

감사합니다. 하지만 다른 질문이 있습니다. 만약 내가''print A() .'' 나는'5'를 얻었습니다. get 메소드가 속성 꾸미기와 작동하는 것처럼 보입니다. –

+1

'A()'는'A' 타입의 새로운 객체를 생성하기 때문에. 그리고 생성자 메쏘드는'__var' 멤버 속성을'5'로 초기화합니다. '.var '에 대한 후속 속성 접근은 새로 생성 된'A' 객체를 질의하고'5'를 반환합니다. – Santa

+0

파이썬 3에서는 이와 같이 할 필요가 없습니다. – riza