setattr(x, 'y', v) is equivalent to...

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

help(setattr) hat geschrieben:... setattr(x, 'y', v) is equivalent to ''x.y = v''.
Auch equivalent zu

Code: Alles auswählen

x.__dict__['y'] = v
:?:

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

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.
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.
Antworten