2014-01-05 61 views
0

我在看這條巨蟒文檔頁面:Python運算符用屬性裝飾器重載?

http://docs.python.org/2/library/functions.html#property

class C(object): 
    def __init__(self): 
     self._x = None 

    def getx(self): 
     return self._x 
    def setx(self, value): 
     self._x = value 
    def delx(self): 
     del self._x 
    x = property(getx, setx, delx, "I'm the 'x' property.") 
右鍵下方

說:

If then c is an instance of C, c.x will invoke the getter, c.x = value will invoke the setter and del c.x the deleter. 

對我來說,CX =值看起來像一個值賦值給一個函數,因爲cx是一個函數,除非「=」運算符被重載。這裏發生了什麼?

與del c.x相同的東西

謝謝。

+0

'c.x'不是一個函數,它是一個屬性對象。 – BrenBarn

回答

3

property是一個描述符,它改變了Python處理屬性訪問的方式。在這裏閱讀一個很好的介紹:http://docs.python.org/2/howto/descriptor.html

+1

簡短的回答是肯定的,'='和'del'正在超載。相關的方法是'__get __()','__set __()'和'__delete __()'。如果定義了這些,則分配,訪問和刪除時的對象行爲將被重載。大衛主義的鏈接有所有細節。 –