__getattribute__ effect
""" class C (object): a = ' abc ' def __getattribute__ (self, *args, **kwargs): print ("__getattribute__ () is Called ") print args if args[0] = = ' A ': return object.__getattribute__ (self, *args, **kwargs) else: print ' Call function foo () ' return object.__getattribute__ (self, ' foo ') () def foo (self): return "Hello" if __name__ = = ' __main__ ': c = C () print C.foo"" "
Callback
classCallback:def __init__(self, instance, function_name): Self.instance= Instance#api.selfSelf.function_name = Function_name#function defaction (self, params):PrintSelf.instance.__getattribute__(Self.function_name) self.instance.__getattribute__(Self.function_name) (params)classTest:def __init__(self): SELF.CLB=Nonedefregister (self, CLB): SELF.CLB= CLB#Callback (self, self.function.__name__) defdo_test (self): params=[] self.clb.action (params)classApi (object):def __init__(self, test_instance): Test_instance.register (Callback (self, self.function.__name__)) deffunction (self, params):PrintparamsPrint('function') T=Test () a=Api (t) t.do_test ()
The callback function principle of Python