Il decoratore Python che potenzia l’esperienza dello sviluppatore 🚀

Il decoratore Python potenzia l'esperienza dello sviluppatore 🚀

Il decoratore @overload di Python, presente nel modulo Python integrato typing, consente agli sviluppatori di specificare più firme specifiche per tipo per una funzione o un metodo. Ciò fornisce una base per un controllo dei tipi più chiaro e un miglioramento degli strumenti IDE.

Perché è importante? ⚠️

Il decoratore @overload è ampiamente utilizzato, spesso senza riconoscerne esplicitamente la presenza.

Ti sei mai chiesto come le funzioni Python integrate come max() possono accettare numerose permutazioni di parametri eppure il tuo IDE sa come gestirle?

Considera la versatilità della funzione max() come illustrato nell’esempio seguente. Possiamo utilizzare la funzione in modi diversi.

Screenshot degli utilizzi di max() | Immagine dell'autore

Ma una volta fornito un parametro errato, il tuo IDE ti avverte immediatamente di un argomento inatteso.

Screenshot dell'avviso IDE quando si passa un parametro non valido | Immagine dell'autore

Quindi, come funziona ? ⚙️

Il decoratore @overload fornisce indizi ai verificatori statici dei tipi e agli IDE sugli utilizzi potenziali. Pertanto, rende possibile convalidare se le chiamate a una funzione o un metodo sovraccaricato corrispondono a una delle firme definite, evidenziando le discrepanze durante lo sviluppo.

Ogni dichiarazione di sovraccarico affronta un caso specifico di tipi di argomenti e output.

Screenshot dell'implementazione del sovraccarico del codice sorgente in Python. | Immagine dell'autore

Un caso di utilizzo nel mondo reale in Declarai ✅

Nel corso dello sviluppo di Declarai, un framework open-source che traduce il codice Python in compiti LLM, ho scoperto i vantaggi sorprendenti dell’uso dei sovraccarichi.

Il pacchetto Declarai offre un’interfaccia per modelli di intelligenza artificiale di vari fornitori. Tuttavia, l’inizializzazione di questi modelli non è semplice. Ogni fornitore ha il proprio set unico di modelli, configurazioni e token API associati. Qui entra in gioco overload. Invece di dipendere dagli errori in fase di esecuzione per guidare gli sviluppatori, abbiamo utilizzato overload per guidare lo sviluppatore sulle combinazioni di parametri valide per ciascun fornitore.

GitHub — vendi-ai/declarai: Un framework semplice ma estensibile per lavorare con LLM nel mondo reale…

Un framework semplice ma estensibile per lavorare con LLM nel mondo reale software. Inizia piccolo e cresci come ti serve! …

github.com

Come abbiamo usato @overload?

Nell’interfaccia principale di Declarai, il nostro obiettivo è guidare gli sviluppatori nell’inizializzazione corretta della classe Declarai con l’insieme appropriato di configurazioni del modello di linguaggio.

Pertanto, possiamo utilizzare il decoratore @overload come segue per assistere gli sviluppatori nell’inizializzazione di Declarai con modelli da — OpenAI, Huggingface e AI21.

class Declarai:  @overload  def __init__(      self,      provider: ProviderOpenai,      model: ModelsOpenai,      version: Optional[str] = None,      openai_token: Optional[str] = None,  ):      ...    @overload  def __init__(      self,      provider: ProviderHuggingface,      model: str,      hub_api_token: Optional[str] = None,  ):      ...    @overload  def __init__(      self,      provider: ProviderAI21,      model: ModelsAI21,      ai21_api_token: Optional[str] = None,  ):      ...  def __init__(**kwargs):      # Ignoriamo l'effettiva implementazione poiché non è pertinente per mostrare l'utilizzo degli overload      print(**kwargs)

Nell’esempio sopra, puoi vedere che sono impostati diversi inizializzatori per ogni provider. Ciò garantisce che gli sviluppatori ricevano indicazioni sui nomi dei modelli appropriati, sulle impostazioni di configurazione e sui parametri del token specifici del provider scelto.

Avviso – Non tutti i provider nell’esempio sopra sono implementati in Declarai. Sono stati utilizzati solo come esempio.

Come influisce questo sull’esperienza dello sviluppatore? 🤩

Considera i seguenti esempi di PyCharm:

Screenshot di PyCharm. Nessun diritto riservato

Puoi osservare come l’IDE di PyCharm segnali le combinazioni di modelli e parametri non validi, così come gli argomenti inaspettati.

Wow! Non è preferibile incontrare errori in fase di esecuzione?

Conclusioni

Il decoratore overload in Python è più di un semplice strumento di controllo dei tipi. In interfacce di sistemi complessi, agisce come una guida, garantendo che gli sviluppatori selezionino le opzioni corrette e forniscono i parametri appropriati. Queste “piccole” cose possono creare un’esperienza per gli sviluppatori che è intuitiva e resistente agli errori.

Segui Declarai 📩

Spero che l’articolo ti sia piaciuto, ti consiglierei vivamente di seguire la mia pagina Linkedin.

Inoltre ti incoraggio ad esplorare Declarai in tempo reale e vedere quanto sia bello lavorare con un framework che sfrutta gli overload per migliorare notevolmente l’esperienza dello sviluppatore.

Dai un’occhiata alla documentazione 📖

Declarai

Declarai, trasforma il codice Python in attività LLM, facile da usare e pronto per la produzione. Declarai trasforma il tuo codice Python in…

vendi-ai.github.io

Aggiungici una stella su github ⭐️

GitHub – vendi-ai/declarai: Un framework semplice ma estendibile per lavorare con LLM nel mondo reale…

Un framework semplice ma estendibile per lavorare con LLM nel software del mondo reale. Inizia piccolo e cresci come desideri! …

github.com