請參見下面的簡單的例子:混淆在python __get__和__call__
class Celsius(object):
def __init__(self, value=0.0):
self.value = float(value)
def __get__(self, instance, owner):
return self.value
def __set__(self, instance, value):
self.value = float(value)
def __call__(self):
print('__call__ called')
class Temperature(object):
celsius = Celsius()
def __init__(self):
self.celsius1 = Celsius()
T = Temperature()
print('T.celsius:', T.celsius)
print('T.celsius1:', T.celsius1)
output
T.celsius: 0.0
T.celsius1: <__main__.Celsius object at 0x023544F0>
我不知道爲什麼他們有不同的輸出。 我知道T.celsius
會打電話給__get__
和T.celsius1
打電話__call__
。
沒有什麼可遺憾,這是一個很好的問題。 – brice 2012-03-28 10:41:12
所以,你自己回答了你自己的問題。 – Denis 2012-03-28 10:43:43
非常好的問題。我必須檢查文檔。相當混亂的行爲,海事組織。 – codeape 2012-03-28 10:52:21