Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
枚举Python类属性(不是函数)_Python_Python 2.7_Properties_Attributes_Enumerate - Fatal编程技术网

枚举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进行内省:S
inspect.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>)]