描述符:例項屬性遮蓋方法的原因

limalove發表於2024-04-03

描述符:非特殊的方法可以被例項屬性遮蓋

函式和方法只實現了__get__方法,屬於非覆蓋型描述符。

特殊方法不受這個問題的影響,是因為直譯器只在類中尋找特殊方法。 __repr__, __getattr__ 都是如此

測試程式碼:

class LineItem:
    def __init__(self, description, weight, price):
        self.description = description
        self.weight = weight
        self.price = price


    def subtotal(self):
        return self.weight * self.price




l = LineItem('apple', 4,5)
print(l.subtotal())
print(l.subtotal)

#建立例項屬性subtotal
l.subtotal = 'test'
print(l.subtotal)
# print(l.subtotal())  #此時再訪問例項的subtotal方法會報錯,提示TypeError: 'str' object is not callable

相關文章