如何在Python中自动导入根类的所有子类?

时间:2010-11-19 16:58:37

标签: python class import

我想知道是否可以在python中自动导入类的所有子类,而无需为每个子类编写import subclassxy。

4 个答案:

答案 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>

你为什么不告诉我们你真正想要实现的目标?这样,我们可以帮助您找到解决方案。