2010-05-25 137 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 

任何人都可以解釋爲什麼結果是Falsepython私有屬性

回答

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

謝謝。 但我有另一個問題。爲什麼如果我只是做'打印A()。var'我得到了'5' 好像get方法使用屬性裝飾器。 – 2010-05-25 12:46:15

+1

因爲'A()'創建一個類型爲'A'的新對象。構造函數方法初始化'__var'成員屬性爲'5'。隨後訪問'.var'的屬性查詢新創建的'A'對象,並返回'5'。 – Santa 2010-05-25 18:39:56

+0

在Python 3中,你不必這樣做。 – riza 2010-05-26 01:01:19