別の可能なオプションですが、それはあなたが以前に何を意味しているのかによって異なります:
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()
出力:
bar:1
zoom!
これにより、値のない属性をチェックすることもできます。
だが!誤ってインスタンス化してundefined
複数の場所を比較しないように注意してくださいis
。
更新:
上記の段落で警告していたこと、一致しない複数の未定義があるため、最近このパターンを少し変更しました:
undefined = NotImplemented
NotImplemented
は、と混同しないでください。NotImplementedError
組み込みundefined
です。JSの意図とほぼ一致し、その定義をどこでも再利用でき、常に一致します。欠点は、ブール値では「真実」であり、ログやスタックトレースで奇妙に見える可能性があることです(ただし、このコンテキストでのみ表示されることがわかっているとすぐに乗り越えられます)。
import string hasattr(string, "lower")