使用位于不同模块中的Mixin类的getattr从调用方获取类

时间:2018-10-21 22:18:10

标签: python python-2.7

我的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类不能存在于同一模块中的原因是因为它打算在其他几个模块中通用使用。

0 个答案:

没有答案