美好的一天!
我正在编写一个为我的数据感知应用程序构建GUI的小工具.
基本思想是获取包含模型描述(sqla/elixir实体)作为输入的模块,并向用户显示此模块中可用类(继承自Entity())及其字段(继承自Field())的列表.
该pyclbr模块是罚款获得类和它们的方法,但它不能读取其他类成员.我知道__dict__并检查模块,但问题是它们需要实例化一个有问题的类,这在这种情况下是错误的.那么,有另一种方式吗?
我真的不想将模块解析为文本.:)
我不确定我知道你的意思
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()的回答.