我想有一个基于传递给构造函数的参数添加mixin的类。这是我尝试过的:
class MixinOne(object):
def print_name(self):
print("{} is using MixinOne.".format(self.name))
class MixinTwo(object):
def print_name(self):
print("{} is using MixinTwo.".format(self.name))
class Sub(object):
def __new__(cls, *args, **kwargs):
mixin = args[1]
if mixin == 'one':
bases = (MixinOne,) + cls.__bases__
elif mixin == 'two':
bases = (MixinTwo,) + cls.__bases__
return object.__new__(type('Sub', bases, dict(cls.__dict__)))
def __init__(self, name, mixin):
print('In Sub.__init__')
self.name = name
唯一的问题似乎是__init__
没有被调用,因此这些print_name
方法将不起作用。
__init__
就Sub
火?要么
__init__
仅在__new__
返回类的实例时调用。您的即时课程是从mixin和Sub
的父级继承的,而不是从Sub
自身继承的。如果您设置,它可能会起作用bases = (MixinOne, cls)
。
编写工厂函数(或类方法),而不是重载Sub
的构造。更好的是,仅创建一些子类而不是在运行时创建类。:)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句