[Samuele] > >>> class C(object): > ... def f(self): pass > ... > >>> class D(C): pass > ... > >>> D.f > <unbound method D.f> > >>> super(D,D).f > <bound method D.f of <class '__main__.D'>> > > I think this should produce the same thing as D.f, Really? It makes no sense either way though. super(D, D) only makes sense from inside a class method; there the first argument should be the current class and the second should be the cls argument to the class method, e.g.: class C(object): def cm(cls): pass cm = classmethod(cm) class D(C): def cm(cls): super(D, cls).cm() # ~Same as C.cm(cls) And this works. I should also mention that super() should really only be used to call a method with the same name as the currently called method -- I see no use case for using super() with another method. > that means implementation-wise > > f.__get__(None,D) should be called > > not f.__get__(D,D). > > _.__get__(None,D) would still do the right thing for static AND class methods: > > >>> def g(cls): pass > ... > >>> classmethod(g).__get__(None,D) > <bound method type.g of <class '__main__.D'>> It shouldn't be terribly hard to detect this situation and fix it (somewhere in super_init()) but unless you have a use case I'd rather consider this as a "don't care" situation. --Guido van Rossum (home page: http://www.python.org/~guido/)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4