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

Code: Alles auswählen

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

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.