replacement for new.instancemethod in Python3?

Michele Simionato michele.simionato at gmail.com
Sun Apr 5 16:18:01 CEST 2009


On Apr 5, 3:58 pm, s... at pobox.com wrote:
>     Michele> There is no need for new.instancemethod for new style classes:
>
>     >>> class C: pass
>     ...
>     >>> c=C()
>     >>> def f(self): pass
>     ...
>     >>> c.f = f.__get__(c, C)
>     >>> c.f
>     <bound method C.f of <__main__.C object at 0xb7b6fdec>>
>
> Like a chimpanzee I can mimic your use of __get__ (that is, use the pattern
> you've defined without understanding what it means), but based on the 3.1
> docs I haven't the slightest idea what it's really supposed to do:
>
>     object.__get__(self, instance, owner)
>         Called to get the attribute of the owner class (class attribute
>         access) or of an instance of that class (instance attribute
>         access). owner is always the owner class, while instance is the
>         instance that the attribute was accessed through, or None when the
>         attribute is accessed through the owner. This method should return
>         the (computed) attribute value or raise an AttributeError exception.
>
> And what does object.__set__ do?
>
>     object.__set__(self, instance, value)
>         Called to set the attribute on an instance instance of the owner
>         class to a new value, value.
>
> What attribute on the instance?
>
> I rather like functools.partial better than object.__get__.  At least I can
> understand it.
>
> Skip

Perhaps the docstring should contain a link to Raymond
Hettinger's descriptor essay: http://users.rcn.com/python/download/Descriptor.htm



More information about the Python-list mailing list