Polimorfizm umożliwia użycie metod o tej samej nazwie w różnych klasach i otrzymaniu różnych wyników.
Oznacza, że można wysłać ten sam komunikat do obiektów różnych klas powiązanych poprzez dziedziczenie, oraz osiągnąć różne, odpowiednie dla konkretnego obiektu wyniki.
class Zwierze():
def __str__(self):
return self.__class__.__name__
class Kot(Zwierze):
pass
z = Zwierze()
print(z)
k = Kot()
print(k)
class Zwierzak:
def jedz(self, jedzenie):
print(self.__class__.__name__, "je", jedzenie)
class Pies(Zwierzak):
pass
class Kot(Zwierzak):
pass
def nakarm(zwierzak):
if not isinstance(zwierzak, Zwierzak):
raise TypeError("Musi być zwierzak")
if isinstance(zwierzak, Pies):
zwierzak.jedz("karme dla psa")
elif isinstance(zwierzak, Kot):
zwierzak.jedz("karme dla kota")
kot = Kot()
pies = Pies()
nakarm(pies)
nakarm(kot)