Python中检查属性是否存在的替代方法是什么?

6
a = SomeClass()
if hasattr(a, 'property'):
        a.property

这是检查属性是否存在的惟一方法吗?是否有其他做法?


1
dup?https://dev59.com/LHRB5IYBdhLWcg3weXOX - dani herrera
4个回答

8
你可以直接使用属性,并在不存在时捕获AttributeError异常。但使用hasattr也是一种合理的方法。
使用异常捕获的一个潜在问题是,你无法轻松区分属性不存在和存在,但当你调用它时,一些代码会运行并引发AttributeError(可能由于代码中的错误)。
你还可以查看以下相关问题,以获取更多关于此主题的信息:

6

好的,你可以尝试访问它并在AttributeError出现时捕获它。

try:
    a.foo
except AttributeError:
    ...

1
我没有处理过太多的多线程代码,但它似乎是处理此问题的唯一线程安全的方式。这正确吗?我的意思是,似乎另一个线程可以在 hasattr(a, 'foo')a.foo 调用之间的某个时刻删除 a.foo ,而使用原子操作则可以避免这种情况。 - Kirk Strauser

1

你也可以使用以下方法:

if 'property' in a.__dict__:
    a.property

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接