<div dir="ltr"><div><div><div>Ciao,<br><br></div>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.<br><br></div>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.<br><br>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.<br><br></div>Al momento mi sono venute in mente tre soluzioni:<br><ol><li>controllare con hasattr la presenza dell'attributo nel metodo __init__ della classe astratta</li><li>definire nella classe astratta una proprietà (decorata con @property) che solleva un'eccezione NotImplementedError</li><li>definire nella classe astratta un metodo astratto (decorato con @abstractmethod) con lo stesso nome dell'attributo<br></li></ol><div><div><div><div><div><div>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.<br><br></div><div>Grazie,<br></div><div>Marco<br></div><div><br></div><div>-- <br><div class="gmail_signature"><div dir="ltr"><span style="font-family:monospace,monospace"></span><span style="font-family:monospace,monospace">|_|0|_|</span><br><span style="font-family:monospace,monospace"></span><span style="font-family:monospace,monospace"></span><div><span style="font-family:monospace,monospace">|_|_|0|<br>|0|0|0|<br><br></span></div></div></div>
</div></div></div></div></div></div></div>