Python:只使用dir()获取导入模块中定义的类?

kra*_*r65 7 python import module class

我有一个用Python编写的模块.我现在想将它导入另一个脚本并列出我在此模块中定义的所有类.所以我尝试:

>>> import my_module
>>> dir(my_module)
['BooleanField', 'CharField', 'DateTimeField', 'DecimalField', 'MyClass', 'MySecondClass', 'ForeignKeyField', 'HStoreField', 'IntegerField', 'JSONField', 'TextField', '__builtins__', '__doc__', '__file__', '__name__', '__package__', 'datetime', 'db', 'division', 'os', 'struct', 'uuid']
Run Code Online (Sandbox Code Playgroud)

我在my_module只定义了两个类是MyClassMySecondClass,其他的东西都是我导入所有的东西my_module.

我现在想要以某种方式获得所有已定义的类的列表,my_module而不会获得所有其他内容.有没有办法在Python中执行此操作?

Ale*_*ton 25

使用该inspect模块检查活动对象:

>>> import inspect
>>> import my_module
>>> [m[0] for m in inspect.getmembers(my_module, inspect.isclass) if m[1].__module__ == 'my_module']
Run Code Online (Sandbox Code Playgroud)

然后应该工作,将每个class定义在其中my_module.

  • 真好 如果m [1] .__ module__ == my_module .__ name__可能更好。 (4认同)

Mos*_*ted 5

您可以使用Python类浏览器

import pyclbr
module_name = 'your_module'
module_info = pyclbr.readmodule(module_name)
print(module_info)

for item in module_info.values():
    print(item.name)
Run Code Online (Sandbox Code Playgroud)

它将列出定义的所有类 your_module