<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">2016-03-15 17:15 GMT+00:00 Marco Santamaria <span dir="ltr"><<a href="mailto:marco.santamaria@gmail.com" target="_blank">marco.santamaria@gmail.com</a>></span>:<br><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div dir="ltr">In realtà da Python 3.3 è deprecato in favore dell'uso combinato di @property e @abstractmethod. </div></div></div></div></blockquote><div><br></div><div>Vero. Comunque il concetto e' quello. </div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div dir="ltr">Il guaio di questo approccio è che le classi derivate devono implementare un metodo decorato con @property e non basta definire una proprietà (giustamente non attributo, che è più generale) come con @abstractmethod<br></div></div></div></div></blockquote><div><br></div><div>Esatto. Solo che non e' banale fare veramente un "abstractattribute".</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div dir="ltr">Poi mi è venuta in mente anche una quarta possibilità: chiamare hasattr nel metodo __new__ della classe astratta, cosa che segnala l'eccezione un po' prima che se chiamato in __init__<br></div></div></div></div></blockquote><div><br></div><div>Farlo in __new__ e' marginalmente meglio che farlo in __init__ per vari motivi (non tanto il fatto che sia segnalata "un po' prima" -- dal punto di vista dell'utente l'eccezione "esce" nello stesso punto). E non e' esattamente chiaro se sia meglio controllare con hasattr (o equivalente) sull'oggetto oppure guardare i parametri di input.</div><div><br></div><div>Quello che vorrei fosse chiaro e' che in questo universo il tuo problema e' che dipendi in modo marcato da cose fuori dal tuo controllo. Cioe', il motivo per cui ti stai sbattendo per questo "abstract attribute" e' che vuoi di fatto dare sta libreria in mano a terze parti (potenzialmente anche interni) e vuoi evitare che il contratto del tuo codice non sia mantenuto (e se non lo e', segnalarlo in modo opportuno).</div><div><br></div><div>Solo che Python ti consente di fare tantissime cose (anche molto sensate) e che il *come* le fai puo' vuole dire che il tuo controllo funziona o meglio. Per dire... cosa succede se uno ha delle namedtuples nella gerarchia da qualche parte? Mica banale...</div></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"> .<br>..: -enrico-</div>
</div></div>