[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

AltStyle によって変換されたページ (->オリジナル) /