Python разрешает «переопределять» методы с разными сигнатурами, но вы никогда не можете иметь два метода с одинаковыми именами в одном классе, даже если их сигнатуры различны (то есть перегрузка методов отсутствует). В случае переопределения метода, если вы вызываете методы с неправильным числом параметров, определенных для объекта, вы получите ошибку. Помните, что методы Python - это просто пары «ключ-значение» в словаре, присоединенном к объекту, и «переопределение» означает просто замену значения в этом словаре, изначально скопированного из словаря базового класса для того же ключа.
В некоторых случаях требуется, чтобы метод производного класса имел дополнительных параметров, чем базовый класс. Чтобы сделать это в Python, сохранив также LSP , вы можете использовать следующую технику:
class Base:
def hello(self, name, *kargs, **kwargs):
print("Hello", name)
class Derived(Base):
def hello(self, name, age=None, *kargs, **kwargs):
super(Derived, self).hello(name, age, *kargs, **kwargs)
print('Your age is ', age)
b = Base()
d = Derived()
b.hello('Alice')
b.hello('Bob', age=24)
d.hello('Rick')
d.hello('John', age=30)
Выше будет напечатано:
Hello Alice
Hello Bob
Hello Rick
Your age is None
Hello John
Your age is 30
Играть с этим кодом