Q? Calling nearest inherited method
Laurent POINTAL
pointal at lure.u-psud.fr
Thu May 18 05:01:54 EDT 2000
On Wed, 17 May 2000 18:37:00 GMT, Guido van Rossum <guido at python.org>
wrote:
>: There's a better way. (I believe Jeremy Hylton first suggested this; he saw
>: it as an idiom in another language:)
>:
>: class C(B):
>: super_doit = B.doit
>: def doit(self, arg):
>: self.super_doit(arg)
>:
>: This avoids the need to explicitly pass self.
Not sure its really better...
1) The lowest problem: you have to define it for each function in each
class in the hierarchy to have a clean model.
2) The biggest problem, it can go into infinite recursion...
Here is an example of the biggest problem:
>>> class A :
... def dothis(self) :
... print "In A.dothis."
...
>>> class B(A) :
... super_dothis = A.dothis
...
>>> class C(B) :
... super_dothis = B.dothis
... def dothis(self) :
... print "In C.dothis."
... self.super_dothis()
...
>>> c=C()
>>> c.dothis()
In C.dothis.
In A.dothis.
[Until here, its well. Now, introduce a new D subclass, and as we have
done for B, implement the super_dothis...]
>>> class D(C) :
... super_dothis = C.dothis
... def hello(self) :
... self.dothis()
...
>>> d=D()
>>> d.hello()
In C.dothis.
In C.dothis.
In C.dothis.
In C.dothis.
In C.dothis.
In C.dothis.
In C.dothis.
...
[here hitting ctrl-C]
So I will still with the <parentClass>.<method>(self...) usage which
works.
Thanks.
A+
Laurent.
---
Laurent POINTAL - CNRS/LURE - Service Informatique Experiences
Tel/fax: 01 64 46 82 80 / 01 64 46 41 48
email : pointal at lure.u-psud.fr ou lpointal at planete.net
More information about the Python-list
mailing list