Programming by Contract

shaileshkumar shaileshk at gmail.com
Wed Aug 12 11:56:03 EDT 2009


zope.interface provides extensive support for design by contract.
http://pypi.python.org/pypi/zope.interface.
This package can be used independently of zope in other projects.
- Shailesh

On Aug 12, 2:20 am, Ethan Furman <et... at stoneleaf.us> wrote:
> Charles Yeomans wrote:
>
> > On Aug 11, 2009, at 3:30 PM, Ethan Furman wrote:
>
> >> Ethan Furman wrote:
>
> >>> Greetings!
> >>> I have seen posts about the assert statement and PbC (or maybe it  
> >>> was DbC), and I just took a very brief look at pycontract
> >>> (http://www.wayforward.net/pycontract/) and now I have at least one
> >>> question:  Is this basically another  way of thinking about unit
> >>> testing, or is the idea of PbC more  along the lines of *always*
> >>> checking the input/output of functions  to ensure they are correct?  
> >>> (*Contstant vigilance!* as Prof Moody  would say ;)
> >>> I know asserts can be turned off, so they obviously won't work for  
> >>> the latter case, and having seen the sample of pycontract it seems  
> >>> it only does its thing during debugging.
> >>> So is Design (Programming) by Contract a fancy way of saying  
> >>> "Document your inputs/outputs!" or is there more to it?
> >>> ~Ethan~
>
> >> Hmmm...
>
> >> Well, from the (apparently) complete lack of interest, I shall take  
> >> away the (better?) documentation ideas and unit testing ideas, and  
> >> not worry about the rest.  :)
>
> > Design by contract is complementary to unit testing (I notice that the  
> > author of PEP 316 appears confused about this).  DbC is, roughly  
> > speaking, about explicit allocation of responsibility.  Consider this  
> > contrived example.
>
> > def foo(s):
> >     require(s is not None)
> >     //code
> >     ensure(hasattr(returnValue, '__iter__'))
>
> > The require condition tells you that it's the caller's responsibility  
> > to pass a non-nil argument to foo.  The ensure condition is a  guarantee
> > that foo will return something suitable for iteration, if  the
> > precondition in the require condition is satisfied.  These  conditions
> > can be enforced at runtime, but may not be, for reasons of  performance.
>
> > DbC is in fact about not *always* checking the input/output of  
> > functions; on the contrary, Bertrand Meyer, the inventor of DbC,  claims
> > that DbC allows one to eliminate such redundancy, and the  resulting
> > overhead.
>
> > Charles Yeomans
>
> Many thanks!
>
> So if I understand -- Python's EAFP fits well with DbC, as DbC seems
> well suited to say, "This is your responsibility, and this is mine,"
> stated in programming terms (who needs comments? ;)  Combined with unit
> testing (which should be easier to design correctly given the DbC code),
> healthy code seems more attainable.
>
> Interesting.  Thank you for the information.
>
> ~Ethan~




More information about the Python-list mailing list