<div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">E mi chiedevo quindi se ci fossero dei "tool in Python che ne<br>
facilitano l'implementazione e l'uso corrente.<br></blockquote><div><br></div><div>Anche io sono un amante del design by contract, però sinceramente ho sempre avuto molte difficoltà a implementarlo in Python senza il costo di un eccessivo overhead.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">particolarmente aggiornato, e c'è Zope Interface:<br>
<a href="https://pypi.python.org/pypi/zope.interface/3.8.0" target="_blank">https://pypi.python.org/pypi/<u></u>zope.interface/3.8.0</a></blockquote><div><br></div><div>Diciamo che la mancanza di vere interfacce in Python può rendere difficoltoso sia il design by contract sia l'utilizzo dei design pattern, perché purtroppo può mandare in errore il programmatore maldestro, soprattutto per l'assenza di controlli durante lo sviluppo (le ABC aiutano, ma ti accorgi dell'errore solo quando instanzi la classe).</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Volevo quindi chiedervi se e come approcciate il design by contract in<br>
python: con semplici docstring, come prevede PEP 316<br>
(<a href="https://www.python.org/dev/peps/pep-0316/" target="_blank">https://www.python.org/dev/<u></u>peps/pep-0316/</a>), oppure con tool (e quali)<br>
più strutturati?<br></blockquote><div><br></div><div>Io non ho trovato nulla di soddisfacente, soprattutto nulla di trasparente.</div><div><br></div><div>Ecco questo è il vero problema dell'implementazione del dbc. In teoria i controlli devono essere attivati solo al momento dello sviluppo/test del software per essere disabilitati nel codice in produzione. Per questo in Java e altri linguaggi i controlli del dbc si fanno con gli assert.</div><div><br></div><div>In python non mi risulta esista nulla del genere, quindi usare il dbc potrebbe rendere incasinato il codice, dovendo mettere if e valori che indicano se abilitarlo o meno.</div><div><br></div><div>Però il discorso è interessante, se qualcuno ha avuto migliori esperienze si faccia avanti! :P</div></div>