我有一个工作模块,其中包含一个工厂函数、一个超类和两个子类。实际模块在这里。
我将工厂拆分为自己的文件,并将两个子类放入 commands/ 目录中,这样我就可以解决由于在包含我的 super 的模块中导入我的子类而引起的递归问题。
就在我认为我已正确导入所有内容时,当我尝试时,工厂被一个空的子类列表卡住:
for cls in Command.__subclasses__():
它不漂亮,但它有效。我想要一种更优雅的方式将字符串转换为类名。循环遍历 __subclasses__ 确实太挑剔了。我只是不太了解元类来应用它。
from commands.shVersionCmd import shVersionCmd
from commands.shVRFCmd import shVRFCmd
def CommandFactory(commandnode):
if commandnode.attrib['name'] == 'shVersionCmd': return shVersionCmd(commandnode)
if commandnode.attrib['name'] == 'shVRFCmd': return shVRFCmd(commandnode)