【发布时间】:2015-07-06 04:47:34
【问题描述】:
hasattr 文档说它接受一个对象和一个属性名称,并让您知道该属性是否存在于该对象上。
我发现它似乎也适用于类名(即不是实例对象)。
类似:
class A:
def Attr1(self):
pass
> hasattr(A, 'Attr1')
True
>
我想用它来使一些测试代码更容易编写,但不希望以后被咬,以防这是实现的副作用而不是真正的意图。
请不要要求查看测试代码以查看我是否可以做其他事情,因为这不是真正的问题。
对此有什么官方的python立场吗?我认为在文档中提到的对象是在谈论实例对象。
我尝试使用谷歌搜索(并查看 StackOverflow 中的一些问题),但似乎没有找到任何东西。
【问题讨论】:
-
“我认为在文档中提到的对象是一个实例对象” - 不,任何对象,包括类本身。
-
这很正常。请记住,
instance.method(stuff ...)实际上是Class.method(instance, stuff ...)的语法糖,即这些方法实际上是类的属性。 -
@jonrsharpe:太好了!有没有任何参考。对我来说似乎有点奇怪:-)
-
类是实例对象;它们是
type的实例(或任何该类的元类)。 -
@ProgrammerPerson 哦,来吧; "python 一切都是对象" 的第一个谷歌命中:stackoverflow.com/q/865911/3001761