另一个可能的选择,但这取决于您之前的意思:
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
,它是内置的:它半匹配JS的意图,undefined
您可以在任何地方重用它的定义,并且它将始终匹配。缺点是,它在布尔值中是“真实的”,并且在日志和堆栈跟踪中看起来很奇怪(但是当您知道它仅在此上下文中出现时,您会很快克服它)。
import string hasattr(string, "lower")