美好的一天!
我正在编写一个为我的数据感知应用程序构建GUI的小工具。
基本思想是获取包含模型描述(sqla/elixir
实体)的模块作为输入,并向用户显示可用类列表(继承自Entity()
)及其字段(继承自Field()
)来自此模块。
pyclbr 模块适用于获取类及其方法,但它无法读取其他类成员。我知道__dict__
和检查模块,但问题是它们需要实例化一个有问题的类,这在这种情况下是错误的。那么,有另一种方式吗?
我真的不想将模块解析为文本。 :)
答案 0 :(得分:5)
我不确定我知道你的意思:
class a(object):
b = 'a'
c = 'd'
print dir(a)
打印
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'b', 'c']
您可以使用
print [i for i in dir(a) if not i.endswith('__')]
如果您不想看到特殊方法。
您无需实例化该类即可查看其成员。您不会在方法中看到添加的属性,但是在类定义或元类“__new__
方法中定义的所有内容都将存在。”
请参阅我对inspect.getmembers() vs __dict__.items() vs dir()的回答,了解有关这些不同函数究竟返回的更多信息。