Skipping a superclass

Steven D'Aprano steve at REMOVE-THIS-cybersource.com.au
Sun Aug 2 08:36:41 EDT 2009


I have a series of subclasses like this:

class A(object):
    def method(self, *args):
        print "Lots of work gets done here in the base class"

class B(A):
    def method(self, *args):
        print "A little bit of work gets done in B"
        super(B, self).method(*args)

class C(B):
    def method(self, *args):
        print "A little bit of work gets done in C"
        super(C, self).method(*args)


However, the work done in C.method() makes the work done in B.method() 
obsolete: I want one to run, or the other, but not both. C does need to 
inherit from B, for the sake of the other methods, so I want C.method() 
*only* to skip B while still inheriting from A. (All other methods have 
to inherit from B as normal.)

So what I have done is change the call to super in C to super(B, self) 
instead of super(C, self). It seems to work, but is this safe to do? Or 
are there strange side-effects I haven't seen yet?



-- 
Steven



More information about the Python-list mailing list