2010-05-25 2 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?python частный атрибут

ответ

4

Декоратор property работает только в классах нового стиля. В Python 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(). Var' i получил' 5' Похоже, что get method работает с декоратором свойств. –

+1

Поскольку 'A()' создает новый объект типа 'A'. И метод конструктора инициализирует атрибут '__var' элемента' 5'. Последующий доступ к свойствам '.var' запрашивает вновь созданный объект' A' и возвращает '5'. – Santa

+0

В Python 3 вам не обязательно делать это. – riza

Смежные вопросы