Introduzione all'argomento Il “polimorfismo crittografico” Il **polimorfismo** (dal greco polý - “molti” e morphe - “forma”) nella programmazione è una proprietà di una funzione che le consente di essere utilizzata in diversi contesti senza modificarne il comportamento . Pertanto, una funzione di un tipo può essere utilizzata per essere richiamata all'interno di un altro tipo, pur mantenendo il suo significato semantico originale. Una condizione necessaria affinché una funzione possa essere utilizzata come funzione non di riferimento (esterna) è l'incapsulamento. Se si accede direttamente al codice funzione, si dice che sia in codice sferico. La funzione può essere utilizzata anche con i modificatori `__init__`, `__new__` e `__call__` - queste sono proprietà del decoratore `@staticmethod` e `@classmethod`. In questo caso si può parlare di “polimorfismo statico” o “polimorfico di classe”.
Ad esempio, la funzione per calcolare la radice quadrata: ``` def sq_root(x): return x ** 0.5 ``` e la funzione per calcolare la funzione parabolica:
```py def parabola(coefs): coefficienti della funzione y = ax^2 + bx + c pass ``` entrambe le funzioni possono essere utilizzate in un programma, all'interno di una funzione e/o di una classe, con lo stesso successo. Accettano argomenti, un valore restituito e mantengono il comportamento del codice sorgente all'interno dei loro corpi allo stesso modo. Come risultato della loro implementazione, possono essere considerate funzioni, cioè