Python:仅获取在导入模块中使用dir()定义的类?
我有一个用Python编写的模块。现在我想将它导入到另一个脚本中,并列出我在此模块中定义的所有类。所以我试着:Python:仅获取在导入模块中使用dir()定义的类?,python,class,import,module,Python,Class,Import,Module,我有一个用Python编写的模块。现在我想将它导入到另一个脚本中,并列出我在此模块中定义的所有类。所以我试着: >>> import my_module >>> dir(my_module) ['BooleanField', 'CharField', 'DateTimeField', 'DecimalField', 'MyClass', 'MySecondClass', 'ForeignKeyField', 'HStoreField', 'IntegerFie
>>> 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']
我在我的_模块中定义的两个类是MyClass
和MySecondClass
,其他的都是我导入到myu模块中的东西
我现在希望能够以某种方式获得my_module
中定义的所有类的列表,而无需获取所有其他内容。在Python中有这样做的方法吗?使用inspect
模块检查活动对象:
>>> import inspect
>>> import my_module
>>> [m[0] for m in inspect.getmembers(my_module, inspect.isclass) if m[1].__module__ == 'my_module']
这样就可以了,在my_模块
中定义每个类
如果您确实想使用dir(),它将列出您的_模块中定义的所有类,如下所示:
>>> import module
>>> [eval("module." + objname) for objname in dir(module) if type(eval("module." + objname)) is type]
或(脚本格式)
但这使用了“eval”功能,使用起来确实不安全。我会坚持虽然有可能获得这些信息,但尝试这样做是脆弱的,会导致不明显的行为。一般来说,反射对于调试非常有用,但在实际生产代码中使用之前应该非常仔细地考虑。要记录哪些名称可以在外部(公共)使用,可以定义\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
即使在子模块中定义了类,但您希望它可以从顶级模块中获得,它也可以工作。用asyncio
module试试看,看看我的意思是什么,这个模块默认是用Python安装的,还是需要手动安装?@Alexis.Rolland它来自标准libraryNice。如果m[1],则可能。\uuuuu模块\uuuuu==my\u模块。\uuuu名称\uuuuu
会更好。
>>> import module
>>> [eval("module." + objname) for objname in dir(module) if type(eval("module." + objname)) is type]
import module
classes = []
for objname in dir(module):
obj = eval("module." + objname)
if type(obj) is type:
classes.append(obj)
print(classes)