【发布时间】:2016-03-10 23:45:12
【问题描述】:
假设我有两个容器类,它们的行为略有不同,但有很多常用方法。我使用 mixin 类将这些方法添加到两个容器中。
例如:
class SpamContainer(Mixin, BaseClass):
def __init__(self, spam):
super(SpamContainer, self).__init__(spam)
class DifferentSpamContainer(Mixin, DifferentBaseClass):
def __init__(self, spam):
super(DifferentSpamContainer, self).__init__(spam)
class Mixin(object):
# has no __init__()
def useful_method(self):
for s in self.spam:
# do something
现在我想向Mixin 添加一个新方法,该方法创建并返回一个新容器对象——如果self 是SpamContainer,我想创建其中一个,而如果它是DifferentSpamContainer,我想创造其中之一。如何从Mixin 的方法中调用正确的构造函数?
我想也许我可以使用这样的东西:
class Mixin(object):
def method(self, spam):
return self.__init__(spam)
或
class Mixin(object):
def another_method(self, spam):
return self.__class__(spam)
但我无法让它工作。
我使用的是 python 2.7。
【问题讨论】:
-
对任何重要的事情都非常小心地使用 Mixins,它们很快就会失控。为什么要将构造功能放入 mixin 的实例级(例如,而不是仅在基类上调用 init 方法(或类级构造函数)?
-
我想我不明白为什么你不能只使用子类的构造函数。?
标签: python python-2.7 oop inheritance multiple-inheritance