如何枚举标有@property
?
class MyClass:
@property
def my_property():
pass
像这样,但inspect.isproperty
没有lambda过滤器:
properties = inspect.getmembers(obj, inspect.isproperty)
显然,这些被称为托管属性。
答案 0 :(得分:3)
这样做:
inspect.getmembers(obj.__class__, lambda x: isinstance(x, property))
以下是它的工作原理(使用IPython):
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>)]
这是有效的,因为property
确实是一个普通的(新式)类;通过使用@property
标记内容,您只需创建property
的实例。这也意味着可以使用property
将属性的实例(在类上)与isinstance
进行类型比较。