Why is there no instancemethod builtin?

George Sakkis gsakkis at rutgers.edu
Sat Jun 18 18:06:03 EDT 2005


"Steven Bethard" wrote:

> John Reese wrote:
> > I now do:
> >
> >   if isinstance(x, list):
> >
> > It is my understanding that this is what people do nowadays.
>
> I wouldn't go that far.  I don't have an isinstance check for lists
> anywhere in my entire codebase.  Why do you think you need to check to
> see if something is of type list?  Why don't you just use it as needed,
> and find out, e.g.:
>
> try:
>      itr = iter(x)
> except TypeError:
>      # do whatever you need to do if it's not iterable
> else:
>      # do whatever you need to do if it *is* iterable

A class of cases I've found necessary to do explicit type checking is
when a different action is taken for different types, but where duck
typing can't distinguish between them. For example, a function that
returns a string representation of an S-expression, represented as a
list of nested lists:

def s_expr(obj):
    if isinstance(obj, list):
        return "(%s)" % ' '.join(map(s_expr,obj))
    else:
        return str(obj)

>>> s_expr([1, [2,3], [4,5], "foo"])
>>> '(1 (2 3) (4 5) foo)'

Here duck typing doesn't help because the function should take the if
branch only for lists and not other iterables (e.g. strings).

George




More information about the Python-list mailing list