Un nuovo stile per le classi

Guido van Rossum - The History of Python - http://python-history.blogspot.com[Dopo una lunga assenza, questo blog è tornato! Continuerò grossomodo da dove mi sono fermato lo scorso anno, cercando di mantenere costante la frequenza delle pubblicazioni]

Prima, ho descritto come l'aggiunta delle classi in Python fosse essenzialmente un ripensamento. L'implementazione scelta fu senza dubbio un esempio della filosofia "cut corners" (smussa angoli) di Python.
Tuttavia, con l'evoluzione di Python, diversi problemi con l'implementazione delle classi divennero uno dei principali argomenti da gestire da parte di utenti Python esperti.

Uno dei problemi relativi all'implementazione delle classi consisteva nell'impossibilità di definire sottoclassi a partire dai tipi built-in. Per esempio, liste, dizionari, stringhe e altri oggetti erano in qualche modo "speciali" e non potevano essere specializzati attraverso la creazione di sottoclassi. Una limitazione piuttosto bizzarra per un linguaggio che ama definirsi "object oriented".

In Python 2.2, mi ritagliai un po' di tempo per reimplementare le classi e "farle per bene". Tale cambiamento fu, di sicuro, la più ambiziosa riscrittura di uno dei principali sottosistemi Python fino a ora e qualcuno potrebbe sicuramente accusarmi di aver sofferto di una certa "sindrome da secondo-sistema" nel corso di questa operazione. Non solo mi sono occupato di consentire la generazione di sottoclassi per i tipi built-in, ma ho aggiunto anche il supporto per delle vere metaclassi, cercando di mettere a posto l'ordine di richiamo dei metodi in caso di ereditarietà multipla, aggiungendo inoltre altre nuove caratteristiche. La principale fonte di ispirazione per questo lavoro è stata il libro "Putting Metaclasses to Work" di Ira Forman e Scott Danforth, la cui lettura mi ha fornito la nozione specifica di metaclasse, concetto differente da quello presente in Smalltalk.

Un aspetto interessante della riscrittura delle classi è che le nuove classi sono state introdotte come una nuova caratteristica del linguaggio e non come un ammodernamento della classi vecchio stile. Infatti, per garantire compatibilità rispetto alle versioni precedenti, la vecchia implementazione delle classi rimane il modo predefinito per creare classi in Python 2. Per creare una classe con lo stile nuovo, basta semplicemente definire una sottoclasse di un'esistente classe di nuova tipologia come object (che è la radice nella gerarchia delle classi nuovo stile). Per esempio:

class A(object):
istruzioni

Il passaggio alle classi dal nuovo stile è stato un grosso successo. Le nuove metaclassi sono diventate popolari tra gli sviluppatori di framework e spiegare le classi è diventato più semplice a causa del minor numero di eccezioni. Il fatto di aver mantenuto la compatibilità con il passato consente al vecchio codice di funzionare contemporaneamente allo sviluppo delle classi dallo stile nuovo. Finalmente, sebbene la vecchia impostazione per le classi verrà rimossa dal linguaggio, gli utenti si stanno abituando a scrivere "class MiaClasse(object)" per definire una classe, il che non è così male.

Articolo originale: http://python-history.blogspot.com/2010/06/new-style-classes.html