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