Warum funktioniert das:macht __dict__ Eine Immobilie
class Bunch(dict):
def __init__(self, *args, **kwargs):
super(Bunch, self).__init__(*args, **kwargs)
self.__dict__ = self
b = Bunch()
b["a"] = 1
print(b.a)
wenn auch mit einer kreisförmigen Referenz:
import sys
print(sys.getrefcount(b))
# ref count is 3 when normally it is 2
Aber nicht dies:
class Bunch(dict):
@property
def __dict__(self):
return self
b = Bunch()
b["a"] = 1
b.a
# raises AttributeError
Während __dict__
ist ein Attribut von den meisten Englisch: www.mjfriendship.de/en/index.php?op...39&Itemid=32 Es gibt ein spezielles Verhalten, das hinter den Kulissen implementiert wird, das die Deskriptor-Logik erstellt von der property
.
Denken Sie an 'self .__ dict__ = self'. Offensichtlich kann das * nicht äquivalent zu "self .__ dict __ ['__ dict__'] = self" sein, oder? So muss "selbst .__ dict__" magisch sein. – Kevin
@OferSadan: Nein, Funktion oder nicht ist egal, und es ist sowieso keine Funktion im zweiten Beispiel. – user2357112