class 个名字的 hasattr
hasattr on class names
hasattr 文档说它需要一个对象和一个属性名称,并让您知道该对象上是否存在该属性。
我发现它似乎也适用于 class 名称(即不是实例对象)。
类似于:
class A:
def Attr1(self):
pass
> hasattr(A, 'Attr1')
True
>
我想用它来使一些测试代码更容易编写,但不想以后被咬,以防这是实现的副作用而不是真正的意图。
请不要要求查看测试代码以查看我是否可以做其他事情,因为那不是真正的问题。
官方python对此有何立场?我假设文档中提到的对象是在谈论实例对象。
我尝试谷歌搜索(并查看 Whosebug 中的一些问题),但似乎没有找到任何东西。
除了实例之外,它还可以在 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 的实例。
1type
是其自身的一个实例,这在纯 python...
我手边没有关于 "official Python stance" 的参考资料,但这是完全正常且有意为之的。请记住
instance_of_SomeClass.some_method(parameters, ...)
实际上是
的语法糖
SomeClass.some_method(instance_of_SomeClass, parameters, ...)
即这些方法实际上是 class 的 属性,因此可以使用 hasattr
.
进行测试
Just want a reference (even for the sentence that everything is an object...)
我建议你阅读这一章(如果你有时间的话,也可以阅读整本书):
http://www.diveintopython.net/getting_to_know_python/everything_is_an_object.html
hasattr 文档说它需要一个对象和一个属性名称,并让您知道该对象上是否存在该属性。
我发现它似乎也适用于 class 名称(即不是实例对象)。
类似于:
class A:
def Attr1(self):
pass
> hasattr(A, 'Attr1')
True
>
我想用它来使一些测试代码更容易编写,但不想以后被咬,以防这是实现的副作用而不是真正的意图。
请不要要求查看测试代码以查看我是否可以做其他事情,因为那不是真正的问题。
官方python对此有何立场?我假设文档中提到的对象是在谈论实例对象。
我尝试谷歌搜索(并查看 Whosebug 中的一些问题),但似乎没有找到任何东西。
除了实例之外,它还可以在 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 的实例。
1type
是其自身的一个实例,这在纯 python...
我手边没有关于 "official Python stance" 的参考资料,但这是完全正常且有意为之的。请记住
instance_of_SomeClass.some_method(parameters, ...)
实际上是
的语法糖SomeClass.some_method(instance_of_SomeClass, parameters, ...)
即这些方法实际上是 class 的 属性,因此可以使用 hasattr
.
Just want a reference (even for the sentence that everything is an object...)
我建议你阅读这一章(如果你有时间的话,也可以阅读整本书):
http://www.diveintopython.net/getting_to_know_python/everything_is_an_object.html