Seite 1 von 1
setattr(x, 'y', v) is equivalent to...
Verfasst: Samstag 5. Februar 2011, 12:44
von mutetella
help(setattr) hat geschrieben:... setattr(x, 'y', v) is equivalent to ''x.y = v''.
Auch equivalent zu
mutetella
Re: setattr(x, 'y', v) is equivalent to...
Verfasst: Samstag 5. Februar 2011, 13:05
von DasIch
Nein, setattr() wird x.__class__.y.__set__(x, v) aufrufen wenn y nicht in x.__dict__ ist. Könnte auch gut sein das bei einer anderen Implementation wie z.B. PyPy Speicheroptimierungen nicht mehr greifen wenn du auf __dict__ zugreifst und der für das Objekte benötigte Speicher sich erhöht.
Re: setattr(x, 'y', v) is equivalent to...
Verfasst: Samstag 5. Februar 2011, 13:55
von lunar
@mutetella: "setattr()" implementiert die vollständige und im Übrigen relativ komplexe Logik der Attributzuweisung, die wesentlich über einen einfachen Zugriff auf "-__dict__" hinausgeht, und insbesondere Deskriptoren im Namensraum des Klassenobjekts sowie eine mögliche Implementierung von "__setattr__()" berücksichtigt.
Im Allgemeinen ist der direkte Zugriff auf ".__dict__" nicht empfehlenswert, eigentlich braucht Dich "__dict__" also überhaupt nicht zu interessieren.