【发布时间】:2018-04-14 12:39:38
【问题描述】:
我有以下问题:
我试图创建一个继承自其他两个类的类,这两个类各有内部__setitem__ 方法。作为featuresB 初始化的一部分,我想调用一个为该类创建内容的createFeaturesB 函数。不幸的是,__setitem__ 的调用指的是featuresA.__setitem__,从最后两个打印语句的输出可以看出。
class featuresA():
def __init__(self):
self._dictA = dict()
return
def __setitem__(self, key, value):
self._dictA[key] = value
return
class featuresB():
def __init__(self):
self._dictB = dict()
self.createFeaturesB()
return
def __setitem__(self, key, value):
self._dictB[key] = value
return
def createFeaturesB(self):
for i in range(3):
self[i] = i**2
return
class C(featuresA, featuresB):
def __init__(self):
featuresA.__init__(self)
featuresB.__init__(self)
return
c = C()
print(c._dictB) #returns: {}
print(c._dictA) #returns: {0: 0, 1: 1, 2: 4}
如何避免这两种方法被覆盖?
【问题讨论】:
-
你可以显式设置你想要的方法
__setitem__ = featuresB.__setitem__,你可以切换父母的顺序,所以featuresB在MRO中排在第一位class C(featuresB, featuresA):,或者你不能从@987654330继承完全是@。 -
谢谢。第一个解决方案是我目前要做的。
标签: python python-3.x multiple-inheritance