请参见下面的简单的例子:混淆在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