У меня есть ситуация, когда метод базового класса (метод __init__
на Python) выполняет большую работу. Производные классы переопределяют __init__
, чтобы просто установить переменную объекта, а затем делегировать базовому классу __init__
. Это прекрасно работает, но теперь у меня есть ситуация.Методы базового класса, которые будут использоваться всеми производными классами, кроме одного
У меня есть некоторый код, который прекрасно вписывается в базовом классе __init__
которой все остальные производные классы кроме один (назовем его A
) нужно использовать. Представьте себе, что базовый класс __init__
был чем-то вроде этого.
def __init__(self):
Action 1...
Action 2...
Теперь все производные классы просто делегируют непосредственно этому. Однако A
должен иметь только Действие 2 в его __init__
. Теперь сидение уродливо. Я могу разделить Action 1 и Action 2 на две отдельные функции, и базовый класс просто вызывает Action2
. Тогда у большинства классов будет что-то подобное.
def __init__(self):
self.Action1()
Other init code...
super().__init__()
и для класса A
, это будет
def __init__(self):
Some init code....
super().__init__()
Но вы можете видеть, что есть кусок кода (вызов self.Action1
что) я должен повторить в большинстве производных классов. Это плохо. Я не уверен, как правильно это закодировать с минимальным повторяющимся кодом, и вам нужно знать, как это сделать.
типичный ответ _maybe А не дочерний класс really_. Подумайте о том, чтобы положить A в качестве родителя (выше в иерархии, а не ниже). – Aganju
В '' 'A''' вы можете * отменить *' '' Action1''' после вызова '' 'super() .__ init __ () '' '? – wwii
@Aganju A - ребенок. Базовый класс содержит много общего кода. В дочерних классах реализовано несколько методов, которые позволяют им вписаться в большую структуру. –