Forum >> Principianti >> modulo abc

Pagina: 1

salve a tutti,

volevo chiedere alla comunity se qualcuno potesse illustrarmi i principali vantaggi di costruire una classe astratta con modulo abc (https://docs.python.org/3/library/abc.html) rispetto a un soluzione del tipo:

class MyClass():

    def mymethod(self):

        raise NotImplementedError('Abstract method')

grazie a tutti in anticipo



--- Ultima modifica di Bibo90 in data 2018-12-12 20:07:10 ---
Questo è python avanzato, molto avanzato. Ed è OOP avanzata. La risposta breve è quella di Tim Peters che si dà di solito per le metaclassi in generale, al punto che è diventata proverbiale: se non sai a che cosa servono le metaclassi, vuol dire che non ne hai bisogno. Il tuo esempio è un caso tipico: per cose così semplici va benissimo come fai tu, senza bisogno di scomodare le abc.


La risposta più completa è qui https://www.python.org/dev/peps/pep-3119/#rationale scritta da Guido stesso. Detto in brevissimo, una abc, inserita in un punto precedente della gerarchia, è un "contratto" che garantisce che un test fatto con isinstance su una sottoclasse riuscirà, e che quindi la sottoclasse avrà certe proprietà definite nel contratto. Questo ha senso quando si vogliono testare le proprietà di una (sotto)classe invece che invocare le proprietà che si sa che esistono... e quando queste tecniche di ispezione possono aver senso? Eh, questa è OOP avanzata, appunto.


Le metaclassi e le abc in particolare sono nel loro ambiente naturale quando uno costruisce una gerarchia di classi relativamente estesa, e soprattutto estendibile da terze parte oltre il progetto dell'autore originale, e/o dove è previsto che l'ispezione sarà una tecnica comune per il codice cliente. Esempio classico, una gerarchia di tipi. E in effetti le abc sono pesantemente usate per i tipi python, vedi modulo "collections".


Se tutto questo non ha nessun senso per te... è perfettamente naturale e francamente non dovresti preoccupartene troppo, secondo Tim Peters.

Guarda mi sembra molto esauriente la tua risposta.
Ho letto e provato (mai utilizzato in un applicazione in realtà) per curiosità qualcosa sulle metaclassi ma non ho mai avuto bisogno di utilizzarle.

Nel mio caso se ho capito bene quanto hai scritto dovrebbe andar bene come già faccio.

Ti ringrazio molto per la consulenza! :)


Pagina: 1



Esegui il login per scrivere una risposta.