【发布时间】:2010-11-19 16:58:36
【问题描述】:
我想知道是否可以在 python 中自动导入一个类的所有子类,而无需为每个子类编写 import subclassxy。
【问题讨论】:
我想知道是否可以在 python 中自动导入一个类的所有子类,而无需为每个子类编写 import subclassxy。
【问题讨论】:
一般来说,你不能。解释器无法知道特定包是否定义了您感兴趣的类的子类。原则上,您明天可以编写一个新的包或模块来定义一个新的子类。现在需要导入它。对于口译员来说,跟踪所有这些将是非常繁重的。
您可以构建一个包来导入所有感兴趣的子类。
【讨论】:
这是一个草稿示例,可以让您了解自己想要做什么:
my_module.py
class RootClass(object):
pass
class ChildClass(RootClass):
pass
在另一个文件.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:我不建议你这样做!!!!
【讨论】:
您可以创建一个模块,为每个子类(可能是自动生成的)和 from module import * 它执行 import subclassxy。
【讨论】:
这根本不可能,因为 Python 无法知道存在哪些子类,直到它已经看到它们(此时它们将位于基类的 subclasses 属性中)。
您为什么不告诉我们您真正想要实现的目标?这样,我们可以帮助您找到解决方案。
【讨论】: