Seite 1 von 1
prüfen ob eine Object eine bestimmte Variable hat
Verfasst: Donnerstag 27. November 2008, 21:40
von Twilo
Hallo,
wie kann ich prüfen, ob im folgenden Beispiel das Object die Variable P_TEST hat?
per google habe ich
Testen, ob eine Python Variable existiert gefunden, funktioniert das auch irgendwie bei Objekten?
mfg
Twilo
Verfasst: Donnerstag 27. November 2008, 22:02
von Leonidas
Das ist keine Variable sondern ein Attribut und dafür gibt es ``hasattr()``.
Verfasst: Donnerstag 27. November 2008, 23:05
von DeJe
Ich mag mich irren...aber bei sauberer Programmierung sollten solche Tests nur zur Fehlersuche nötig sein.

Verfasst: Donnerstag 27. November 2008, 23:27
von DasIch
Nicht bei jeder Anwendung kennt man die Objekte mit denen man zu tun hat, da muss man dann entweder hasattr nutzen oder Exceptions abfangen.
Verfasst: Freitag 28. November 2008, 09:51
von Leonidas
Ich finde ``hasattr()`` durchaus akzeptabel in bestimmten Fällen. Das ist zwar LBYL aber in manchen Fällen führt es zu klarerem Code. Zugegeben, besonders oft braucht man ``hasattr()`` aber in aller Regel nicht.
Autovivification von Klassenattributen
Verfasst: Freitag 28. November 2008, 10:50
von farid
Leonidas hat geschrieben:Ich finde ``hasattr()`` durchaus akzeptabel in bestimmten Fällen. Das ist zwar LBYL aber in manchen Fällen führt es zu klarerem Code. Zugegeben, besonders oft braucht man ``hasattr()`` aber in aller Regel nicht.
Was ist an LBYL in diesem Zusammenhang falsch? Ich könnte mir durchaus Klassen vorstellen, bei denen durch EAFP alleine schon das Abfragen von nicht-existierenden Klassenattributen diese auf "magische" Art und Weise ins Leben ruft. Eine Art Autovivification für Attribute, wenn man es überhaupt so nennen kann.
Als kleine Denksport-Aufgabe stellt sich die Frage, wie Attribut-Autovivification bei Python-Klassen bewerkstelligt werden könnte.

Verfasst: Freitag 28. November 2008, 11:34
von lunar
DeJe hat geschrieben:Ich mag mich irren...aber bei sauberer Programmierung sollten solche Tests nur zur Fehlersuche nötig sein.

Ob man nun eine Ausnahme abfängt oder vorher nachfragt, ist doch letztendlich egal. Man sollte das nehmen, was im Code besser zu lesen ist. "Readability counts" und "practicality beats purity"
@farid
"hasattr" und das Auslösen eines "AttributeError" sollten sich nicht unterschiedlich verhalten. Wenn "hasattr" False liefert, sollte der Zugriff auf ein Attribut mit "AttributeError" fehlschlagen.
Re: Autovivification von Klassenattributen
Verfasst: Samstag 29. November 2008, 11:32
von sma
farid hat geschrieben:Als kleine Denksport-Aufgabe stellt sich die Frage, wie Attribut-Autovivification bei Python-Klassen bewerkstelligt werden könnte. ;)
Meinst du dies?
Code: Alles auswählen
class X(object):
def __getattr__(self, name):
if name not in self.__dict__:
self.__dict__[name] = 42
return self.__dict__[name]
x = X()
print hasattr(x, 'abc')
print x.__dict__
Stefan
Verfasst: Samstag 29. November 2008, 15:02
von Twilo
Hallo,
danke für die Antwort - hasattr funktioniert.
mfg
Twilo