hasattr 文档说它需要一个对象和一个属性名称,并让您知道该属性是否存在于该对象上。
我发现它似乎也适用于类名(即不是实例对象)。
就像是:
class A:
def Attr1(self):
pass
> hasattr(A, 'Attr1')
True
>
我想用它来使一些测试代码更容易编写,但不想稍后被咬,以防这是实现的副作用而不是真正的意图。
请不要要求查看测试代码以查看我是否可以做其他事情,因为这不是真正的问题。
对此有任何官方的python立场吗?我认为文档中提到的对象是在谈论一个实例对象。
我尝试使用谷歌搜索(并查看 StackOverflow 中的一些问题),但似乎没有找到任何东西。
最佳答案
除了实例之外,它还适用于 class
的事实是有意为之。事实上, hasattr
应该适用于您传递给它的任何对象。基本上,它做这样的事情:
def hasattr(obj, attribute):
try:
getattr(obj, attribute)
except:
return False
return True
您可以依靠它,而不必担心以后会因更改而受到影响。注意,在 python-dev 上有一些关于
hasattr
being broken by design 的讨论。其要点是 hasattr
会捕获任何可能具有误导性的异常。请注意,在 python 中,类本身就是
type
的实例。>>> class Foo(object):
... pass
...
>>> type(Foo)
<type 'type'>
所以一切都是something1的一个实例。
1
type
是它自身的一个实例,这在纯 python 中是不可能做到的......关于python - 类名上的 hasattr,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29900715/