Protocolli in Python
Python Protocols
Come utilizzare la sottoscrizione strutturale
Python 3.8 ha introdotto una nuova e interessante funzionalità: i protocolli. I protocolli sono un’alternativa alle classi di base astratte (ABC) e consentono la sottoscrizione strutturale – verificare se due classi sono compatibili in base agli attributi e alle funzioni disponibili. In questo post approfondiremo i dettagli su questo argomento e mostreremo come utilizzare i protocolli utilizzando esempi pratici.

Tipizzazione in Python
Iniziamo discutendo di come è tipizzato Python. È un linguaggio di tipo dinamico, il che significa che i tipi vengono dedotti a tempo di esecuzione e il seguente codice viene eseguito senza problemi:
def add(x, y): return x + yprint(add(2, 3))print(add("str1", "str2"))
La prima chiamata restituisce l’addizione di interi restituendo 5, la seconda restituisce la concatenazione di stringhe restituendo “str1str2”. Questo è diverso, ad esempio, da C++, che è un linguaggio di tipo statico – e in cui dobbiamo fornire dichiarazioni di tipo:
int add(int x, int y) { return x + y;}std::string add(std::string x, std::string y) { return x + y;}int main(){ std::cout<<add(2, 3); std::cout << add("str1", "str2"); return 0;}
La tipizzazione statica offre il vantaggio di poter individuare gli errori a tempo di compilazione, mentre nei linguaggi di tipo dinamico ci si imbatte in questi errori solo durante l’esecuzione. D’altra parte, la tipizzazione dinamica può consentire una prototipazione e una sperimentazione più rapide – uno dei motivi per cui Python è diventato così popolare.
- Questo articolo di AI propone di inserire il mondo tridimensionale nei modelli di linguaggio di grandi dimensioni e introdurre una nuova famiglia di modelli di linguaggio tridimensionali (3D-LLMs)’.
- Il team di Microsoft AI presenta NaturalSpeech 2 un sistema TTS all’avanguardia con modelli di diffusione latenti per una potente sintesi vocale senza bisogno di addestramento e prosodie espressive migliorate.
- Generazione rapida e accurata di ologrammi acustici utilizzando un framework basato su deep learning
La tipizzazione dinamica è anche chiamata duck typing, basata sul detto: “se cammina come un’anatra e fa il verso come un’anatra, allora deve essere un’anatra”. Ergo: se gli oggetti offrono gli stessi attributi/funzioni, dovrebbero essere trattati allo stesso modo e possono essere passati a funzioni che richiedono l’altro tipo.
Tuttavia, soprattutto in prodotti software più grandi e professionali, questa mancanza di affidabilità offre più svantaggi che vantaggi – e quindi la tendenza va verso il controllo dei tipi statici, ad esempio tramite l’uso di suggerimenti di tipo con mypy.
Sottotipizzazione
Un problema interessante – accennato in precedenza, ad esempio, nel breve paragrafo sulla duck typing – è la sottotipizzazione. Se abbiamo una funzione con firma foo(x: X)
, quali altre classi oltre a X
mypy permette di passare alla funzione? (Nota che ora solo…