假设我有两个行为略有不同的容器类,但有很多常用方法。我使用mixin类将这些方法添加到两个容器中。
例如:
public void start()
现在我想向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)
但是我无法让它发挥作用。
我正在使用python 2.7。
答案 0 :(得分:3)
您使用classmethod
:
class Mixin(object):
@classmethod
def alternate_constructor(cls, spam):
return cls(spam)
请注意,您在这里使用mixins似乎有些偏差。通常,在使用继承(单个或多个)时,您需要调用基类上的方法。例如在你的情况下,Mixin
和它混合的各种类都不能同时调用它们的构造函数。实际上,您甚至没有在__init__
中为BaseClass
调用SpamContainer
。这有点奇怪。如果您打算使用多重继承做任何工作,我强烈建议您阅读Super Considered Super!和配套文章Super considered harmful。这将帮助您了解多重继承的缺陷(以及如何避免它们)。