如何创建一组类型并使它们可以从其他模块导入?

2024-10-04 01:29:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用^{}创建一系列类型,而不显式地将这些类型分配给变量,然后使它们可以从其他类导入。你知道吗

到目前为止我得到的是这样的东西

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 = type('AClassNew', (object,), {})

src/a/__init__.py中,一切都将正常工作,但我希望对src/a/a_module.py中定义的任何类都这样做,而不显式地定义它们。你知道吗

有没有办法让这个(或类似的东西)起作用?你知道吗


Tags: nameinpyimportsrc类型for定义
1条回答
网友
1楼 · 发布于 2024-10-04 01:29:24

我通过更新src/a/__init__.py中的globals()来实现这一点。你知道吗

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

这会将具有正确名称的类型添加到此模块的类中,并使其可从其他模块导入。你知道吗

相关问题 更多 >