Siehe einfaches Beispiel unten:Verwirrung über __get__ und __call__ in Python
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>
Ich frage mich, warum sie unterschiedlichen Ausgang haben. Ich weiß, T.celsius
wird rufen Sie die und T.celsius1
rufen Sie die __call__
.
Nichts über leid zu sein, das ist eine gute Frage. – brice
Und so hast du deine eigene Frage beantwortet. – Denis
Sehr gute Frage. Ich musste die Dokumentation überprüfen. Ziemlich verwirrendes Verhalten, IMO. – codeape