大家好,我是金鱼座,一个走在测试领域这片蓝海中, 蹉跎前行的技术渣渣,唯有一直走下去,也许能改变点什么,加油!
钩子方法,是一个比较奇怪的东西, 他实际上不做任何业务操作,主要用于后期注册函数然后引用
举个爪子
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
@File : hook_jack.py
@Author: JACK
@Date : 2019/8/22
@Des :
"""
class HookMethodClass(object):
def __init__(self):
self.hook_method = None
def register_method_hook(self, method):
self.hook_method = method
def play(self):
if self.hook_method == None:
print("未接受到注册方法")
else:
print("接受到了方法")
self.hook_method()
def hooked_method():
print("我是一个业务方法,需要注册使用")
if __name__ == "__main__":
pass
hooka = HookMethodClass()
hooka.register_method_hook(hooked_method)
hooka.play()
显示的结果:
result
从上述对比中发现,实际上钩子方法就是里面的register方法, 这样的方式可以在一些特定的场景中,灵活扩展类的对象操作方式,
例如A同学,B同学,都在看书,一个在看语文,一个在看英语中场景
在日常的类设计中,我们会设计如下结构
class Student():
def read():
pass
但是这种方式就会有一个问题,就是我只有读的对象行为,但是我没有读的目标展示,针对这种情况,我们实际上就可以考虑使用钩子方法
class Student_Hook():
def __init__(self, read_book):
self.read_book = None
def reg_book(self, book):
self.read_book = book
def read():
if self.read_book is not None:
self.read_book()
else:
pass
def book_A():
pass
def book_B():
pass
可以了, 如上图, 当然案例可能并没有充分体现出钩子的更加综合的体验,但是从理解来说,我们知道,钩子就等于是将两个方法通过一种关联方法,实现相关的引用,就想案例中的reg_book,通过这种关联引用,来达到read中的只需要判断是否有方法,有就执行,没有就不执行,而不用去人为if判断是A,B,然后对应去执行bookA和BookB
网友评论