[Python-Dev] Improved super/autosuper

Delaney, Timothy C (Timothy) tdelaney at avaya.com
Tue Jul 6 06:49:12 CEST 2004


guido at python.org wrote:

>>>     class A (autosuper):
>>> 
>>>         def __init__ (self, a, b):
>>>             print 'A.__init__'
>>>             print a, b
>>>             self.super(a, b)
>>> 
>>>         def test (self, a, b):
>>>             print 'A.test'
>>>             print a, b
>>>             self.super(a, b)
>>> 
>>>     class B (A):
>>> 
>>>         def __init__ (self):
>>>             print 'B.__init__'
>>>             self.super(1, 2)
>>>             self.super.test(3, 4)
> 
> One more thing...  What is the point of self.super.test(...)?  When is
> that not the same as self.test(...)?  What's the use case?

import autosuper

class A (autosuper.autosuper):

    def __init__ (self, a, b):
        print 'A.__init__'
        print a, b
        self.super(a, b)

    def test (self, a, b):
        print 'A.test'
        print a, b
        self.super(a, b)

class B (A):

    def __init__ (self):
        print 'B.__init__'
        self.super(1, 2)
        super(B, self).test(3, 4)

    def test (self, a, b):
        print 'B.test'
        self.super(a, b)

B()

---------- Run ----------
B.__init__
A.__init__
1 2
A.test
3 4

Output completed (0 sec consumed) - Normal Termination

As you can see, B.test did *not* get called. By doing self.super.test,
I'm guaranteeing that I'll only see attributes higher in the MRO.

Whether it's a useful thing or not, it's something you can do now with
super.

Tim Delaney


More information about the Python-Dev mailing list