【发布时间】:2018-04-30 09:59:38
【问题描述】:
我有一个带有许多派生类的抽象基类。我试图通过将所有派生类与基类放在同一个文件中来实现相同的行为,即如果我的类是Base、DerivedA、DerivedB、DerivedC 在文件myclass.py我可以写在另一个文件里
import myclass
a = myclass.DerivedA()
b = myclass.DerivedB()
c = myclass.DerivedC()
但每个派生类都在自己的文件中。这必须是动态的,即我可以例如删除derived_c.py,一切仍然有效,除了现在我不能再调用myclass.DerivedC,或者如果我添加derived_d.py,我可以在不接触__init__.py的情况下使用它,所以简单地使用from derived_c import DerivedC不是一个选项.
我尝试将它们全部放在一个子目录中,并在该目录的 __init__.py 中使用 pkgutil.walk_packages() 动态导入所有文件,但我无法让它们直接位于模块的命名空间中,即而不是myclass.DerivedC() 我必须打电话给myclass.derived_c.DerivedC(),因为我不知道如何(或是否可能)使用 importlib 来实现与 from xyz import * 语句等效的操作。
对我如何实现这一点有什么建议吗?谢谢!
编辑:Dynamic module import in Python 的解决方案没有提供将所有模块中的类自动导入包的命名空间的方法。
【问题讨论】:
标签: python python-3.x