2011-12-15 24 views

回答

2

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

如果foo违反惯例,我猜你可能会得到类似[x for x in dir(foo) if type(getattr(foo, x)) == type]这样的类名,但这很丑并且可能非常脆弱。

8

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

import inspect 
import foo 

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

我只有__class__作为输出,而不是真正的类名 – tapioco123 2011-12-15 23:00:19

+1

嗯,我不知道为什么会这样,对我来说工作正常,无论是标准库模块还是我自己编写的模块(使用Python 2.7) – obmarg 2011-12-15 23:52:17

0

您可以通过检查发现dir(foo)元素类型:类将有类型type

import foo 
classlist = [] 
for i in dir(foo): 
    if type(foo.__getattribute__(i)) is type: 
     classlist.append(i) 
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))] 

更新:以上实例H按照Chris Morgan的评论,被编辑为使用getattr(foo, c)而不是使用foo.__getattribute__(c)

0

你可以得到很多关于Python模块的信息,说富,通过导入它,然后使用帮助(模块名称)如下:

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