如何在不实例化类的情况下获取完整的类成员列表?

Ale*_*Vhr 2 python

美好的一天!

我正在编写一个为我的数据感知应用程序构建GUI的小工具.

基本思想是获取包含模型描述(sqla/elixir实体)作为输入的模块,并向用户显示此模块中可用类(继承自Entity())及其字段(继承自Field())的列表.

pyclbr模块是罚款获得类和它们的方法,但它不能读取其他类成员.我知道__dict__检查模块,但问题是它们需要实例化一个有问题的类,这在这种情况下是错误的.那么,有另一种方式吗?

我真的不想将模块解析为文本.:)

agf*_*agf 5

我不确定我知道你的意思

class a(object):
    b = 'a'
    c = 'd'

print dir(a)
Run Code Online (Sandbox Code Playgroud)

版画

['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'b', 'c']
Run Code Online (Sandbox Code Playgroud)

您可以使用

print [i for i in dir(a) if not i.endswith('__')]
Run Code Online (Sandbox Code Playgroud)

如果你不想看到特殊的方法.

您无需实例化该类即可查看其成员.您不会在方法中看到添加的属性,但在类定义或元类' __new__方法中定义的所有内容都将存在.

有关这些不同函数返回的更多信息,请参阅我对inspect.getmembers()vs __dict __.items()vs dir()的回答.