duck-type-checking?

Joe Strout joe at strout.net
Thu Nov 13 10:15:57 EST 2008


On Nov 12, 2008, at 7:32 PM, Steven D'Aprano wrote:

> I'm surprised nobody has pointed you at Alex Martelli's recipe here:
>
> http://code.activestate.com/recipes/52291/

Thanks for that -- it's clever how he combines binding the methods  
he'll use with doing the checking.

> While the recipe is great, it can be tiresome to apply all the time. I
> would factor out the checks into a function, something like this:
>
> def isstringlike(obj, methods=None):
>    """Return True if obj is sufficiently string-like."""
>    if isinstance(obj, basestring):
>        return True
>    if methods is None:
>        methods = ['upper', 'lower', '__len__', '__getitem__']
>    for method in methods:
>        if not hasattr(obj, method):
>            return False
>    # To really be string-like, the following test should pass.
>    if len(obj) > 0:
>        s = obj[0]
>        if s[0] != s:
>            return False
>    return True

Thanks for this, too; that's the sort of method I had in mind.  That  
last test for string-likeness is particularly clever.  I'll need to  
think more deeply about the implications.

Best,
- Joe




More information about the Python-list mailing list