[Python-Dev] Getting rid of unbound methods: patch available
M.-A. Lemburg
mal at egenix.com
Mon Jan 17 13:11:19 CET 2005
Nick Coghlan wrote:
> Guido van Rossum wrote:
>
>> What do people think? (My main motivation for this, as stated before,
>> is that it adds complexity without much benefit.)
>
>
> I'm in favour, since it removes the "an unbound method is almost like a
> bare function, only not quite as useful" distinction. It would allow
> things like str.join(sep, seq) to work correctly for a Unicode
> separator.
This won't work. Strings and Unicode are two different types,
not subclasses of one another.
> It also allows 'borrowing' of method implementations without
> inheritance.
>
> I'm a little concerned about the modification to pyclbr_input.py, though
> (since it presumably worked before the patch). Was the input file
> tweaked before or after the test itself was fixed? (I'll probably get
> around to trying out the patch myself, but that will be on Linux as
> well, so I doubt my results will differ from yours).
>
> The other question is the pickling example - an unbound method currently
> stores meaningful data in im_class, whereas a standard function doesn't
> have that association. Any code which makes use of im_class on unbound
> methods (even without involving pickling)is going to have trouble with
> the change. (Someone else will need to provide a real-life use case
> though, since I certainly don't have one).
I don't think there's much to worry about. At the C level,
bound and unbound methods are the same type. The only
difference is that bound methods have the object
attribute im_self set to an instance object, while
unbound methods have it set NULL.
Given that the two are already the same type, I don't
really see much benefit from dropping the printing of
"unbound" in case im_self is NULL... perhaps I'm missing
something.
As for real life examples: basemethod() in mxTools uses
.im_class to figure the right base method to use (contrary
to super(), basemethod() also works for old-style classes).
basemethod() in return if used in quite a few applications
to deal with overriding methods in mixin classes.
--
Marc-Andre Lemburg
eGenix.com
Professional Python Services directly from the Source (#1, Jan 10 2005)
>>> Python/Zope Consulting and Support ... http://www.egenix.com/
>>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/
>>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/
________________________________________________________________________
::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! ::::
More information about the Python-Dev
mailing list