我试图使用type(name, bases, attributes)
创建一系列类型,而无需将这些类型显式分配给变量,然后使它们可用于从其他类中导入。
到目前为止,我有这样的事情
src/
__init__.py
a/
__init__.py
a_module.py
b/
__init__.py
b_module.py
在src/a/__init__.py
中,我有
import inspect
import sys
for c in inspect.getmembers(sys.modules['src.a.a_module'], inspect.isclass):
type(f'{c.__name__}New, (object,), {})
然后,我想像上面的src/b/b_module.py
一样导入类型
from src.a import AClassNew
a = AClassNew()
但这当然是ImportError: cannot import name
AClassNew`。
我知道我可以放
AClassNew = type('AClassNew', (object,), {})
在src/a/__init__.py
中,一切都会起作用,但是我想对src/a/a_module.py
中定义的任何类都这样做,而无需明确定义它们。
有没有办法使这个(或类似的东西)起作用?
答案 0 :(得分:0)
我只是通过更新globals()
中的src/a/__init__.py
来完成这项工作的。
for c in inspect.getmembers(sys.modules['src.a.a_module'], inspect.isclass):
new_class_name = f'{c.__name__}New'
new_class = type(new_class_name, (object,), {})
globals[new_class_name] = new_class
这会将具有正确名称的类型添加到该模块的类中,并使其可从其他模块导入。