Podczas dziedziczenia metody z klasy bazowej możemy nadpisać kod metody (przesłonić metodę) i wtedy uzyskać całkiem nową funkcjonalność, bądź też powiększyć funkcjonalność metody. Metoda __init__() uzyskała zwiększoną funkcjonalność w klasie pochodnej, natomiast kod metody function1() został przesłonięty w podklasie tzn.
class Person:
def __init__(self, name):
self.name = name
def function1(self):
print('Hello')
class Employee(Person):
def __init__(self, name, job):
super().__init__(name)
self.job = job
def function1(self):
print('Hi!')
if __name__ == '__main__':
john_doe = Employee('John Doe', 'programmer')
print(john_doe.name)
print(john_doe.job)
john_doe.function1()
Funkcja super wywołuje metodę z klasy basowej, w tym przypadku __init__(), dzięki temu metoda w podklasie wykorzystuje kod z klasy bazowej i dodaje nową funkcjonalność.
Zamiast zastosować konstrukcję z funkcją super() można zastosować konstrukcję z nazwą klasy bazowej tj.
Person.__init__(self, name)
Jest to szczególnie przydatne, gdy klasa potomna dziedziczy po kilku klasach bazowych i zależy nam na wykorzystaniu konkretnej metody z określonej klasy bazowej.