[Python] attributi astratti?

Marco Santamaria marco.santamaria a gmail.com
Ven 11 Mar 2016 17:13:26 CET


Ciao,

sto lavorando ad un piccolo framework nel quale mi sento autorizzato ad
usare il modulo abc per creare delle classi astratte/interfacce per
permetterne l'estensione.

Mi sono trovato spesso a dover assicurare la presenza di un attributo nelle
classi derivate da una classe astratta, senza avere la possibilità di
fornire un valore di default ragionevole.

Data la natura dinamica di Python questo può essere fatto in vari modi, ma
mi chiedo quale sia quello più 'idiomatico' in Python 3.4, facendo in modo
che venga sollevata il prima possibile un'eccezione chiara se
quell'attributo non viene definito.

Al momento mi sono venute in mente tre soluzioni:

   1. controllare con hasattr la presenza dell'attributo nel metodo
   __init__ della classe astratta
   2. definire nella classe astratta una proprietà (decorata con @property)
   che solleva un'eccezione NotImplementedError
   3. definire nella classe astratta un metodo astratto (decorato con
   @abstractmethod) con lo stesso nome dell'attributo

Sto usando la 3. quando possibile perché solleva un'eccezione prima delle
altre, ma non mi piace molto l'idea di richiedere un metodo quando voglio
un attributo.

Grazie,
Marco

-- 
|_|0|_|
|_|_|0|
|0|0|0|
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20160311/cf700f3e/attachment.html>


Maggiori informazioni sulla lista Python