Seite 1 von 1
attribut aus String erstellen und self[name]
Verfasst: Dienstag 24. November 2009, 23:25
von elchgesicht
Ich bin über zwei Sachen gestolpert, die ich gerne verstehen möchte als Anfänger:
In einer Klasse A, wird über eine Funktion ein String übergeben, nachdem die Funktion durchgelaufen ist (da werden noch 100 andere Objekte verwendet), ist ein Attribut mit dem Namen des Strings verfügbar, der Code ist ellenlang.
Wie macht man sowas?
Zum anderen wird dabei der Ausdruck
verwendet. Kann mir jemand sagen, was das bedeutet?
Vielen Dank
elch
PS, warum wir der code hier nur so merkwürdig angezeigt?
Verfasst: Dienstag 24. November 2009, 23:37
von jbs
Schau dir mal __setattr__ und __getitem__ an.
Re: attribut aus String erstellen und self[name]
Verfasst: Mittwoch 25. November 2009, 00:05
von Leonidas
elchgesicht hat geschrieben:PS, warum wir der code hier nur so merkwürdig angezeigt?
Wenn du BBCode in deinem Posting deaktivierst, dann geht BBCode nicht mehr.
Vielen Dank,
Verfasst: Mittwoch 25. November 2009, 10:01
von elchgesicht
jetzt hab ichs!
Kurze generelle Frage. Ich habe festgestellt, dass Pythoncode sehr verschieden ist. Manche Programmierer verwenden ununterbrochen buildin Functions um Dinge zu machen, die man sonst zwar auch erreichen kann, aber vielleicht nur über Vererbung und besseres Klassendesign. Z.B. meine ich das hinzufügen von Attributen aus einer anderen Klasse oder Funktion heraus. Oft macht das den Code ziemlich unübersichtlich.
Frage: Ist das jetzt eher die Königsklasse der Pythonprogrammierung oder einfach nur schlechter Stil?
Verfasst: Mittwoch 25. November 2009, 10:26
von Pekh
Wenn du mit "Hinzufügen von Attributen aus einer anderen Funktion heraus" Monkey-Patching meinst: Ich halte es für ziemlich schlechten Stil. Einige sind davon sehr begeistert, beschwören vor allem auch, wie toll man damit testen könne. Ich habe mir gerade beim Testen mit Monkey-Patching schon ziemlich heftig in den Fuß geschossen, so daß ich es jetzt generell ablehne.
Was das Überschreiben von "magischen" Methoden (Die Dinger mit den vier Unterstrichen) betrifft: Das ist gängige Praxis, von der Sprache her so vorgesehen und ich würde es auch als eher guten Stil betrachten. Kommt n bisschen darauf an, *wie* du die Methoden überschreibst. Irgendwo sollte der ursprüngliche Verwendungszweck natürlich erhalten bleiben.

Verfasst: Samstag 28. November 2009, 11:47
von sma
Das erste Beispiel erreicht man auch mit folgenden drei Varianten, die alle ohne `__setattr__` auskommen:
Code: Alles auswählen
class A(object):
def __init__(self, name):
self.__dict__[name] = "X"
class A(object):
def __init__(self, name):
setattr(self, name, "X")
class A(object):
def __init__(self, name):
self.values = {name: "X"}
def __getattr__(self, name):
return self.values[name]
Ellenlang muss da nichts sein.
Stefan