class Test:
def __init__(self):
self.f_list = []
def register(self, function):
if function in self.f_list:
pass
else:
self.f_list.append(function)
def do_test(self):
params = []
for func in self.f_list:
func(params)
class Api:
def __init__(self):
pass
def function(self, params=None):
pass
class SubApi1(Api):
def __init__(self, test):
self.test = test
test.register(self.function)
def function(self, params=None):
print('This is {}\'s {}'.format(self.__class__.__name__, self.function.__name__))
class SubApi2(Api):
def __init__(self, test):
self.test = test
test.register(self.function)
def function(self, params=None):
print('This is {}\'s {}'.format(self.__class__.__name__, self.function.__name__))
t = Test()
a1 = SubApi1(t)
a2 = SubApi2(t)
t.do_test()
输出:
This is SubApi1's function
This is SubApi2's function
这个例子很明显也能实现回调功能,不过与上篇文章中的例子比起来,很明显,肯定快一点,因为调用__getattribute__会涉及查询操作。同时,这个例子也没有了新式类的限制