2010-01-23 27 views
8

給出下面的代碼,輸出看起來有點可疑。爲什麼「進入基地」只打印一次?而且爲什麼不「打印在基地」呢?實際得到/設置似乎工作正常,但。我錯過了什麼?Python屬性

class Base: 
    def __init__(self): 
     self.s = "BaseStr" 

    def getstr(self): 
     print "get in Base" 
     return self.s 
    def setstr(self, s): 
     print "set in Base" 
     self.s = s 
    str = property(getstr, setstr) 

b = Base() 
print b.str 
b.str = "Foo" 
print b.str 

輸出:

get in Base 
BaseStr 
Foo 

回答

18

您需要使用new-style classes的特性才能正常工作。要做到這一點從object派生類:

class Base(object): 
    ... 
+1

現貨,謝謝。 :) – Mizipzor 2010-01-23 23:29:14

+0

而對於Python 3.x,則不需要這樣做。 Python3中的所有類都是新的風格。 – treecoder 2012-05-08 05:34:41

+1

但是如果我沒有繼承'object',我仍然可以在經典類中創建'property',爲什麼? – Alcott 2012-05-12 07:56:47

1

每當創建一個新的類,從object類型派生它。