[Python-bugs-list] [ python-Bugs-535444 ] super() broken with classmethods

noreply@sourceforge.net noreply@sourceforge.net
Wed, 27 Mar 2002 04:26:13 -0800


Bugs item #535444, was opened at 2002-03-26 23:13
You can respond by visiting: 
http://sourceforge.net/tracker/?func=detail&atid=105470&aid=535444&group_id=5470

Category: Python Interpreter Core
Group: Python 2.2.1 candidate
Status: Open
Resolution: None
Priority: 5
Submitted By: Phillip J. Eby (pje)
Assigned to: Nobody/Anonymous (nobody)
Summary: super() broken with classmethods

Initial Comment:
Using super() in a classmethod breaks in Python 2.2. 
Apparently, when super looks up an attribute from the
__mro__ sequence, it calls the found descriptor's
__get__ with the descriptor itself as the 'type'
argument, which breaks horribly with class methods
(which always binds to the type argument).

Presumably, the fix is to pass a NULL type argument,
which should work with the recent fixes to the
classmethod's __get__ logic.  In other words, this code
in the super_getattro function Objects/typeobject.c:

tmp = f(res, su->obj, res);

should probably actually read:

tmp = f(res, su->obj, NULL);



----------------------------------------------------------------------

>Comment By: Martin v. Löwis (loewis)
Date: 2002-03-27 13:26

Message:
Logged In: YES 
user_id=21627

Can you give an example of how to break it? Please also
report what your example does when you run it.

----------------------------------------------------------------------

You can respond by visiting: 
http://sourceforge.net/tracker/?func=detail&atid=105470&aid=535444&group_id=5470