python hook_python_理解篇_钩子方法的理解
大家好,我是金魚座,一個走在測試領域這片藍海中, 蹉跎前行的技術渣渣,唯有一直走下去,也許能改變點什么,加油!
鉤子方法,是一個比較奇怪的東西, 他實際上不做任何業務操作,主要用于后期注冊函數然后引用
舉個爪子
#!/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 hook_python_理解篇_钩子方法的理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c 包含其他文件_C/C++编程笔记:C
- 下一篇: jxl读取html格式excel,基于J