枚举Python类属性(不是函数)

2024-10-04 05:32:10 发布

您现在位置:Python中文网/ 问答频道 /正文

如何枚举用@property标记的Python类的函数?在

class MyClass:
    @property
    def my_property():
        pass

类似于此,但是inspect.isproperty没有lambda筛选器:

^{pr2}$

显然,这些被称为托管属性。在


Tags: lambda函数标记属性mydefmyclassproperty
1条回答
网友
1楼 · 发布于 2024-10-04 05:32:10

这样可以做到:

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的实例。这也意味着可以使用isinstance将属性实例(在类上)与property进行类型比较。在

相关问题 更多 >