sturlamolden <sturlamol...@yahoo.no> wrote: > On 26 Mai, 18:31, Raymond Hettinger <pyt...@rcn.com> wrote: >> I just posted a tutorial and how-to guide for making effective use of >> super(). >> >> One of the reviewers, David Beazley, said, "Wow, that's really >> great! I see this becoming the definitive post on the subject" >> >> The direct link is: >> >> http://rhettinger.wordpress.com/2011/05/26/super-considered-super/ > > I really don't like the Python 2 syntax of super, as it violates > the DRY principle: Why do I need to write super(type(self),self) > when super() will do? Assuming that 'self' will always be named > 'self' in my code, I tend to patch __builtins__.super like this: > > import sys > def super(): > self = sys._getframe().f_back.f_locals['self'] > return __builtins__.super(type(self),self) > > This way the nice Python 3.x syntax can be used in Python 2.x. > > Oh dear, you haven't thought this one through.
After your code above, try this: >>> class A(object): def foo(self): print "A.foo" >>> class B(A): def foo(self): print "B.foo" super().foo() >>> B().foo() B.foo A.foo So far so good. Now try this: >>> class C(B): pass >>> C().foo() ... infinite recursion follows ... Oops. There's a reason why Python 2 requires you to be explicit about the class; you simply cannot work it out automatically at run time. Python 3 fixes this by working it out at compile time, but for Python 2 there is no way around it. -- Duncan Booth http://kupuguy.blogspot.com -- http://mail.python.org/mailman/listinfo/python-list