美文网首页
python_理解篇_钩子方法的理解

python_理解篇_钩子方法的理解

作者: 金鱼座 | 来源:发表于2019-08-22 17:59 被阅读0次

    大家好,我是金鱼座,一个走在测试领域这片蓝海中, 蹉跎前行的技术渣渣,唯有一直走下去,也许能改变点什么,加油!

    钩子方法,是一个比较奇怪的东西, 他实际上不做任何业务操作,主要用于后期注册函数然后引用

    举个爪子

    #!/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

    相关文章

      网友评论

          本文标题:python_理解篇_钩子方法的理解

          本文链接:https://www.haomeiwen.com/subject/psrosctx.html