Eine andere mögliche Option, aber es hängt davon ab, was Sie vorher damit meinen :
undefined = object()
class Widget:
def __init__(self):
self.bar = 1
def zoom(self):
print("zoom!")
a = Widget()
bar = getattr(a, "bar", undefined)
if bar is not undefined:
print("bar:%s" % (bar))
foo = getattr(a, "foo", undefined)
if foo is not undefined:
print("foo:%s" % (foo))
zoom = getattr(a, "zoom", undefined)
if zoom is not undefined:
zoom()
Ausgabe:
bar:1
zoom!
Auf diese Weise können Sie sogar nach Attributen ohne Wert suchen.
Aber! Seien Sie sehr vorsichtig, dass Sie nicht versehentlich undefined
mehrere Orte instanziieren und vergleichen, da dies is
in diesem Fall niemals funktioniert.
Aktualisieren:
Aufgrund dessen, worüber ich im obigen Absatz gewarnt habe, da mehrere undefinierte Werte nie übereinstimmen, habe ich dieses Muster kürzlich geringfügig geändert:
undefined = NotImplemented
NotImplemented
, nicht zu verwechseln NotImplementedError
, ist ein integriertes Element: Es entspricht halb der Absicht eines JS, undefined
und Sie können seine Definition überall wiederverwenden, und es stimmt immer überein. Die Nachteile sind, dass es in Booleschen Werten "wahr" ist und in Protokollen und Stapelspuren seltsam aussehen kann (aber Sie kommen schnell darüber hinweg, wenn Sie wissen, dass es nur in diesem Kontext erscheint).
import string hasattr(string, "lower")