[Python-Dev] Let's get rid of unbound methods

Jp Calderone exarkun at divmod.com
Tue Jan 4 21:02:06 CET 2005


On Tue, 4 Jan 2005 10:28:03 -0800, Guido van Rossum <gvanrossum at gmail.com> wrote:
>In my blog I wrote:
> 
> Let's get rid of unbound methods. When class C defines a method f, C.f
> should just return the function object, not an unbound method that
> behaves almost, but not quite, the same as that function object. The
> extra type checking on the first argument that unbound methods are
> supposed to provide is not useful in practice (I can't remember that
> it ever caught a bug in my code) and sometimes you have to work around
> it; it complicates function attribute access; and the overloading of
> unbound and bound methods on the same object type is confusing. Also,
> the type checking offered is wrong, because it checks for subclassing
> rather than for duck typing.
> 

  This would make pickling (or any serialization mechanism) of 
`Class.method' based on name next to impossible.  Right now, with
the appropriate support, this works:

    >>> import pickle
    >>> class Foo:
    ...     def bar(self): pass
    ... 
    >>> pickle.loads(pickle.dumps(Foo.bar))
    <unbound method Foo.bar>
    >>> 

  I don't see how it could if Foo.bar were just a function object.

  Jp


More information about the Python-Dev mailing list