D
Daniel Fetchinson
I have two classes that both inherit from two other classes which both
inherit from a single class. The two children have two almost
identical methods:
class grandparent( object ):
def meth( self ):
# do something
class parent1( grandparent ):
def meth( self ):
# do something p1
super( parent1, self ).meth( )
class parent2( grandparent ):
def meth( self ):
# do something p2
super( parent2, self ).meth( )
class child1( parent1 ):
def meth( self ):
# do something c
super( parent1, self ).meth( ) # I want to invoke meth on grandparent
class child2( parent2 ):
def meth( self ):
# do something c
super( parent2, self ).meth( ) # I want to invoke meth on grandparent
The meth methods in child1 and child2 are the same, except that in the
last super call, one is referring to parent1, the other is referring
to parent2. If they were exactly the same I could use a mixin where I
could define this method, and both child1 and child2 would inherit
from this mixin too. In this way I wouldn't have to code these methods
twice. But how do I write this mixin? It needs to refer to the
grandparent in such a way that it works in both child1 and child2 and
bypasses both parent1 and parent2. How would I do that?
Notes: (1) of course child1 and child2 have all sorts of methods which
are different, only meth is almost the same. (2) I can't modify the
grandfather class.
Cheers,
Daniel
inherit from a single class. The two children have two almost
identical methods:
class grandparent( object ):
def meth( self ):
# do something
class parent1( grandparent ):
def meth( self ):
# do something p1
super( parent1, self ).meth( )
class parent2( grandparent ):
def meth( self ):
# do something p2
super( parent2, self ).meth( )
class child1( parent1 ):
def meth( self ):
# do something c
super( parent1, self ).meth( ) # I want to invoke meth on grandparent
class child2( parent2 ):
def meth( self ):
# do something c
super( parent2, self ).meth( ) # I want to invoke meth on grandparent
The meth methods in child1 and child2 are the same, except that in the
last super call, one is referring to parent1, the other is referring
to parent2. If they were exactly the same I could use a mixin where I
could define this method, and both child1 and child2 would inherit
from this mixin too. In this way I wouldn't have to code these methods
twice. But how do I write this mixin? It needs to refer to the
grandparent in such a way that it works in both child1 and child2 and
bypasses both parent1 and parent2. How would I do that?
Notes: (1) of course child1 and child2 have all sorts of methods which
are different, only meth is almost the same. (2) I can't modify the
grandfather class.
Cheers,
Daniel