class A(object): def do_your_stuff(self): # do stuff with self for A print "a" class B(A): def do_your_stuff(self): next_class = self.find_out_whos_next() #print next_class next_class.do_your_stuff(self) print "b" def find_out_whos_next(self): l = self.supertypes_list mypos = l.index(B) return l[mypos+1] class C(A): def do_your_stuff(self): next_class = self.find_out_whos_next() #print next_class next_class.do_your_stuff(self) print "c" def find_out_whos_next(self): l = self.supertypes_list mypos = l.index(C) return l[mypos+1] class D(B,C): def do_your_stuff(self): next_class = self.find_out_whos_next() next_class.do_your_stuff(self) print "d" def find_out_whos_next(self): l = self.supertypes_list mypos = l.index(D) return l[mypos+1] B.supertypes_list = [B,A] C.supertypes_list = [C,A] D.supertypes_list = [D,B,C,A] if __name__ == "__main__" : foobar = D() foobar.do_your_stuff()