在python中,如何从mixin类的方法中调用正确的构造函数?

时间:2016-03-10 23:45:12

标签: python python-2.7 oop inheritance multiple-inheritance

假设我有两个行为略有不同的容器类,但有很多常用方法。我使用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 添加一个创建并返回新容器对象的新方法 - 如果Mixinself,我想创建其中一个,而如果它是SpamContainer,我想创建其中一个。如何在DifferentSpamContainer

的方法中调用正确的构造函数

我想也许我可以使用这样的东西:

Mixin

class Mixin(object):
    def method(self, spam):
        return self.__init__(spam)

但是我无法让它发挥作用。

我正在使用python 2.7。

1 个答案:

答案 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。这将帮助您了解多重继承的缺陷(以及如何避免它们)。