python - hasattr 类名

标签 python hasattr

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'>

所以一切都是某事1 的一个实例。

1type 是它自身的一个实例,这在纯 python 中是不可能做到的...

关于python - hasattr 类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29900715/

相关文章:

python - 如何测试python类父类是否定义了方法?

Python 的 hasattr 有时会返回不正确的结果

python - Dataframe Apply方法返回多个元素(系列)

python - PyQt:ListWidget.insertItem 未显示

python - 无法在不中断缩进的情况下粘贴 Python 代码

python - 功能需要很长时间

python - 如何在特定值下对 kdeplot 进行着色

python - 用于获取链接的 Beautifulsoup 和 Soupstrainer 不适用于 hasattr,始终返回 true

python - 在 Python 中检查成员是否存在