我的myModule.mixins中有一个Mixin类。 myModule.main中的一个新类(MyPaternalClass)从myModule.mixins.MyMixin继承。
此mixin的目的是在给定具有子类名称的字符串的情况下生成新的“子”对象,但是这些对象的类位于myModule.main中,而不位于myModule.mixins中。
我了解当Mixin使用以下命令位于同一模块中时如何执行此操作:
this = sys.modules[__name__]
cls = getattr(this, objType)
new_cls_inst = cls()
但是,当mixin类驻留在其自己的模块中时,我很难找到一种执行此操作的好方法。
例如myModule.mixins
class MyMixin(object):
def new_obj(self, objType):
cls = #Get the class
newobj = cls()
return newobj
现在,此混合将用于以下用途:
例如myModule.main
from .mixin import MyMixin
class MyPaternalClass(MyMixin):
def __init__(self):
super(MyPaternalClass, self).__init__()
self.children = []
def add_child(self, child_type):
self.children.append(self.new_obj(child_type))
class Son(object):
def __init__(self):
pass
class Daughter(object):
def __init__(self):
pass
用法类似于:
new_parent = MyPaternalClass()
new_parent.add_child('Son')
new_parent.add_child('Daughter')
mixin类不能存在于同一模块中的原因是因为它打算在其他几个模块中通用使用。