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

时间:2011-08-18 13:31:54

标签: python

美好的一天!

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

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

pyclbr 模块适用于获取类及其方法,但它无法读取其他类成员。我知道__dict__检查模块,但问题是它们需要实例化一个有问题的类,这在这种情况下是错误的。那么,有另一种方式吗?

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

1 个答案:

答案 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()的回答,了解有关这些不同函数究竟返回的更多信息。

相关问题