У меня есть классы BasicEvidenceTarget
и SchedulableSoma
. Иногда я наследую от SchedulableSoma, BasicEvidenceTarget
, иногда я наследую только от SchedulableSoma
. Когда я наследую от SchedulableSoma, BasicEvidenceTarget
, я хочу, чтобы SchedulableSoma
переопределил метод BasicEvidenceTarget.inject_basic_evidence
. Какой хороший способ сделать это?Как переопределить методы базового класса в Python условно, существуют ли они?
Процентовка выглядит следующим образом:
class SchedulableSoma(SchedulableCluster, Soma):
# This is a possible overload of this method in BasicEvidenceTarget.
def inject_basic_evidence(self, *args, **kwargs):
super().inject_basic_evidence(*args, **kwargs)
self.ask_for_reschedule()
Сейчас я безусловно переопределение метода базового класса, и поэтому, если он не существует, есть немного загрязнения метода: если переопределение называется , вызов super завершится неудачно. Было бы лучше условно генерировать переопределение.
Я чувствую, что есть магия __prepare_subclass__
, которая может работать, но я точно не знаю, как это сделать.
Похоже, вам может быть лучше создать отдельный класс «Both» для комбо и переопределить метод в этом классе. Затем либо наследуйте от «Both», либо «SchedulableSoma». – BrenBarn
@BrenBarn: Проблема в том, что существуют три класса, такие как 'BasicEvidenceTarget' - каждый из которых имеет один метод, который' SchedulableSoma' хочет переопределить. Я не хочу создавать 8 классов. –