С концептуальной точки зрения то, что вы делаете, является приемлемым: если один и тот же атрибут метода существует в нескольких базовых классах, вы должны добавить явное переопределение в дочернем классе, возможно, используя реализацию базовых классов.
С точки зрения Pythoni c это также правильно: вы используете несвязанный метод из базовых классов и явно даете им объект. Pythoni c может быть больше, чем super
, но это имеет смысл, только если ваша иерархия имеет промежуточный класс natural :
Child
BaseA BaseB
ImplementationA1 ImplementationA2 ImplementationB1 ImplementationB2
methodX methodX
Затем можно написать:
def methodX(self):
if(self.type_api == '1'):
self.super(BaseA, self)()
else:
self.super(BaseB, self)()
(остерегайтесь супер ищет первый базовый класс BaseA или BaseB в приведенном выше коде, следовательно, промежуточный базовый класс ...)
В любом случае, в теоретической точке Представление: множественное наследование, если его часто рассматривают как сомнительный проект, и многие предпочитают шаблон содержания ( имеет вместо - ) в этом случае. Например, это запрещено на языке Java и, как известно, вызывает проблемы с обслуживанием (наследование алмазов) на языке C ++.