我想知道是否可以在python中自动导入类的所有子类,而无需为每个子类编写import subclassxy。
答案 0 :(得分:3)
总的来说,你不能。解释器无法知道特定包是否定义了您感兴趣的类的子类。原则上,您可以在明天定义新子类时编写新的包或模块。它现在需要导入。对于翻译来说,跟踪所有这些将是非常繁重的。
您可以构建一个导入所有感兴趣的子类的包。
答案 1 :(得分:2)
这是一个草稿示例,可以让您了解自己想要做什么:
my_module.py
class RootClass(object):
pass
class ChildClass(RootClass):
pass
在另一个file.py
中import sys
from my_module import RootClass
# Loop over all subclasses of RootClass.
for class_ in RootClass.__subclasses__():
# from module import subclass.
__import__(class_.__module__, globals(), locals(), [class_.__name__,])
# Update the global namespace with the new class
globals().update({class_.__name__:
getattr(sys.modules[class_.__module__],
class_.__name__)})
print ChildClass
# OutPut : <class 'my_module.ChildClass'>
PS:我不建议你这样做!!!!
答案 2 :(得分:1)
您可以创建一个模块,为每个子类(可能是自动生成的)和import subclassxy
执行from module import *
。
答案 3 :(得分:1)
这根本不可能,因为Python在找到它们之前无法知道哪些子类存在(此时它们将位于基类的子类属性中)。 / p>
你为什么不告诉我们你真正想要实现的目标?这样,我们可以帮助您找到解决方案。