說我有兩個容器類的行爲稍有不同,但有很多常用的方法。我使用mixin類將這些方法添加到兩個容器中。在python中,如何從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方法(或類級構造函數)?) –
我不認爲我理解爲什麼不能你只是使用子類的構造函數? –