How can I call a subclass method from parent class ?

Steve Holden steve at holdenweb.com
Thu Oct 20 06:30:19 EDT 2005


bonono at gmail.com wrote:
> Jason  Lai wrote:
> 
>>If you use a newstyle class, e.g. class A(object), then you can get the
>>superclass with cls.__base__. You could also use super(cls,cls),
>>although note that it returns a <super> object that isn't exactly the
>>same thing as a class -- but good enough for just accessing attributes.
>>
>>Make sure to check that your superclass isn't <object>, otherwise it'll
>>complain about <object> not having a foo attribute. __base__ is
>>probably easier for this purpose. Also be careful with multiple
>>inheritance.
>>
>>No such thing as __super though.
> 
> thanks, it works. Though I don't quite understand what super(cls,cls)
> returns, and it doesn't work if I do a super(cls,cls).foo(). But
> cls.__base__.foo() do the trick.
> 
> thankfully, I don't have multiple inheritance.
> 
> 
In point of fact super() is most useful when you *do* have multiple 
inheritance. The classic example is when classes B and C have a common 
supertype A, and then class D is a subclass of both B and C.

Under these circumstances (the so-called "diamond-shaped inheritance 
graph") it can be problematic to ensure that each superclass's methods 
are called exactly once when methods are being extended rather than 
overridden: should a D call B's method, which then calls A's, and if so 
how does a D ensure that C's method gets called without it also calling 
A's method.

Calls to super() are used to effectively place a linearised oredering on 
the superclasses to ansure that the diamond-shaped inheritance pattern 
is correctly handled to give the correct method resolution order.

regards
  Steve
-- 
Steve Holden       +44 150 684 7255  +1 800 494 3119
Holden Web LLC                     www.holdenweb.com
PyCon TX 2006                  www.python.org/pycon/




More information about the Python-list mailing list