如何在python模块中找到类的名称?

时间:2011-12-15 12:21:15

标签: python

如果我导入模块:

import foo

如何找到它包含的类的名称?

5 个答案:

答案 0 :(得分:8)

您可以使用inspect模块执行此操作。例如:

import inspect
import foo

for name, obj in inspect.getmembers(foo):
    if inspect.isclass(obj):
        print name

答案 1 :(得分:2)

签入dir(foo)。按照惯例,类名将是CamelCase中的类名。

如果foo违反惯例,我可以猜测类名是[x for x in dir(foo) if type(getattr(foo, x)) == type],但这很难看,可能非常脆弱。

答案 2 :(得分:1)

从qeustion How to check whether a variable is a class or not?我们可以使用inspect模块检查变量是否为类(示例代码从接受的答案中无耻地解除):

>>> import inspect
>>> class X(object):
...     pass
... 
>>> inspect.isclass(X)
True

所以要建立一个列表,其中包含我们可以使用的模块中的所有类

import foo
classes = [c for c in dir(foo) if inspect.isclass(getattr(foo, c))]

更新:根据Chris Morgan的评论,上述示例已经过编辑,使用getattr (foo, c)而不是foo.__getattribute__(c)

答案 3 :(得分:0)

您可以查看通过dir(foo)找到的元素类型:类的类型为type

import foo
classlist = []
for i in dir(foo):
    if type(foo.__getattribute__(i)) is type:
        classlist.append(i)

答案 4 :(得分:0)

您可以通过导入Python模块然后使用help(module-name)获取有关Python模块的大量信息,例如foo,如下所示:

>>> import foo 
>>> help(foo)