From: "Guido van Rossum" <guido@python.org> > [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. It was sloppy phrased, super(D,D).f should return the same value as C.f, that means an unbound method like D.f. > 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) you mean C.cm() > 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. > > 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. > no, but passing D,D even to classmethods __get__ is working but conceptually bogus, btw the clarifying example Python impl for super semantics at http://www.python.org/2.2.2/descrintro.html#cooperation is broken wrt to classmethods.
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