class Hooker(Delegator): def __init__(self): Delegator.__init__(self) class Interceptor(Delegator): def __init__(self): Delegator.__init__(self) def fcn(): print "Fcn at base" if __name__ == "__main__": bottom = Hooker() bottom.setdelegate(fcn) middle = Hooker() middle.setdelegate(bottom) top = Interceptor() top.setdelegate(middle) print "top.delegate: ", top.delegate print "calling top(): ", top()