duck-type-checking?

George Sakkis george.sakkis at gmail.com
Wed Nov 12 15:04:21 EST 2008


On Nov 12, 1:35 pm, Terry Reedy <tjre... at udel.edu> wrote:
> Cristina Yenyxe González García wrote:
>
> > 2008/11/12 Joe Strout <j... at strout.net>:
> >> So I need functions to assert that a given identifier quacks like a string,
> >> or a number, or a sequence, or a mutable sequence, or a certain class, or so
> >> on.  (On the class check: I know about isinstance, but that's contrary to
> >> duck-typing -- what I would want that check to do instead is verify that
> >> whatever object I have, it has the same public (non-underscore) methods as
> >> the class I'm claiming.)
>
> >> Are there any standard methods or idioms for doing that?
>
> > You can use hasattr(object, name), with 'name' as the name of the
> > public method to check. It returns True if the object responds to that
> > method, False otherwise.
>
> Too hard. For methods, which are what define duck species, and any
> attribute guaranteed to not be null, "assert ob.name" is equivalent to
> "assert hasattr(ob, 'name')".

As you just showed they're not; one raises AttributeError and the
other AssertionError. Not that it matters much but these are typically
reported differently by testing frameworks.

George



More information about the Python-list mailing list