如何在python中获取类的所有属性

时间:2018-04-15 05:32:15

标签: python reflection

我在python中定义了这个类

class MyClass(object):
   @property
   def property1(self):
       # type: () -> pb.data.Property1

   @property
   def property2(self):
       # type: () -> pb.data.Property2

如何使用反射来读取该类具有的所有属性 然后从属性名称到其类

创建一个映射

类似

{"property1":"pb.data.Property1", "property2":"pb.data.Property2"}

请记住,每个属性中的第一行是注释。有明确的方法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用inspect.getmembers获取所有属性值。希望下面的代码可以帮助你。

import inspect
class MyClass(object):
    @property
    def property1(self):
        return 'pb.data.Property1'

    @property
    def property2(self):
        return 'pb.data.Property2'

    def get_attributes(self):
        attributes = inspect.getmembers(self, predicate=lambda a: not(inspect.isroutine(a)))
        return {d[0]:d[1] for d in attributes if not(d[0].startswith('__') and d[0].endswith('__'))}


MyClass().get_attributes()

输出 {'property1': 'pb.data.Property1', 'property2': 'pb.data.Property2'}