Dziedziczenie cz.2

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.