枚举Python类属性(不是函数)
如何枚举标有枚举Python类属性(不是函数),python,python-2.7,properties,attributes,enumerate,Python,Python 2.7,Properties,Attributes,Enumerate,如何枚举标有@property的Python类的函数 class MyClass: @property def my_property(): pass 类似于此,但没有用于检查的lambda筛选器。isproperty: properties = inspect.getmembers(obj, inspect.isproperty) 显然,这些被称为托管属性。这样做: inspect.getmembers(对象类,lambda x:isinstance(x,属
@property
的Python类的函数
class MyClass:
@property
def my_property():
pass
类似于此,但没有用于检查的lambda筛选器。isproperty:
properties = inspect.getmembers(obj, inspect.isproperty)
显然,这些被称为托管属性。这样做:
inspect.getmembers(对象类,lambda x:isinstance(x,属性))
下面是它的工作原理(使用IPython):
[29]中的:类Foo(对象):
..:@财产
..:def foo(self):返回42
....:
在[30]中:obj=Foo()
[31]中的inspect.getmembers(对象类lambda prop:isinstance(prop,property))
Out[31]:[('foo',)]
这是因为
property
实际上是一个普通(新样式)类;通过使用@property
标记某些内容,您只是创建了属性的一个实例。这也意味着可以使用isinstance
python2.x或3.x将属性实例(在类上)的类型与property
进行比较?(可能没什么区别,但最好指定)您也可以使用dir,这样您就不需要为dir中的prop(obj.uuu class_uu,prop)导入inspect[isinstance(getattr(obj.u class_uuu,prop),property)
编辑,谢谢@ErikFirst,它必须是dir(obj.u class_u)
,但是IIRC,我在某个地方读到,dir
不应该用于真正的代码,而只是用于调试/开发,但我可能错了。inspect模块已经使用dir进行内省:Sinspect.py
第247到251行好的,不知道:)我也不知道,只是对您的评论感到好奇:P很高兴知道这一点
In [29]: class Foo(object):
....: @property
....: def foo(self): return 42
....:
In [30]: obj = Foo()
In [31]: inspect.getmembers(obj.__class__, lambda prop: isinstance(prop, property))
Out[31]: [('foo', <property at 0x106aec6d8>)]