Polimorfizem (večobličnost)

Večina izmed metod, ki smo jih napisali do zdaj, deluje samo za določen tip. Ko ustvarimo nov objekt, napišemo tudi metode, ki delujejo nad tem tipom.

Vendar obstajajo tudi operacije, ki bi jih želeli izvajati nad različnimi tipi, kot na primer aritmetične operacije, ki smo jih spoznali v tem poglavju. Če več tipov podpira isto množico operacij, lahko napišemo funckije, ki bodo delovale nad katerim koli izmed teh tipov.

Na primer operacija multadd (ki je pogosta v linearni algebri) potrebuje tri parametre; nato pomnoži prva dva in prišteje tretjega. Funkcijo lahko v Pythonu napišemo takole:

def multadd(x, y, z):
  return x * y + z

Ta funkcija bo delovala s katerima koli vrednostima x in y, ki ju lahko zmnožimo, in za katero koli vrednost z, ki jo lahko prištejemo zmnožku.

Funkcijo lahko pokličemo s številskimi vrednostmi, na primer:

>>> multadd (3, 2, 1)
7

Ali z objekti Tocka:

>>> t1 = Tocka(4, 3)
>>> t2 = Tocka(5, 7)
>>> print(multadd (2, t1, t2))
(11, 15)
>>> print(multadd (t1, t2, 1))
44


V prvem primeru je objekt Tocka pomnožen s številom, zmnožku pa je prištet drug objekt Tocka. V drugem primeru pa skalarni produkt dveh objektov Tocka vrne število, ki mu je, kot tretji parameter, prišteto število.

Funkcije, ki lahko uporabljajo argumente različnih tipov, se imenujejo polimorfne (ang. polymorphic) oziroma večoblične.

Izvedi Počisti