輕松掌握python設計模式之訪問者模式
更新時間:2016年11月18日 15:17:06 作者:天風隼
這篇文章主要幫助大家輕松掌握python設計模式之訪問者模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了python訪問者模式代碼,供大家參考,具體內(nèi)容如下
"""訪問者模式""" class Node(object): pass class A(Node): pass class B(Node): pass class C(A, B): pass class Visitor(object): def visit(self, node, *args, **kwargs): meth = None """python支持多重繼承,在解析父類的__init__時,定義解析順序的是子類的__mro__屬性,內(nèi)容為一個存儲要解析類順序的元組。""" """觀察到,super的執(zhí)行路徑和類的__mro__列舉的類順序吻合;而__mro__的順序可以看作是深搜的結果""" for cls in node.__class__.__mro__: """方法名""" meth_name = 'visit_' + cls.__name__ """getattr()函數(shù)是Python自省的核心函數(shù),具體使用大體如下: 獲取對象引用getattr,Getattr用于返回一個對象屬性,或者方法 如果Visitor對象中有屬性meth_name則獲得方法返回的值,否則賦值None """ meth = getattr(self, meth_name, None) if meth: break if not meth: meth = self.generic_visit return meth(node, *args, **kwargs) def generic_visit(self, node, *args, **kwargs): print('通常訪問: ' + node.__class__.__name__) def visit_B(self, node, *args, **kwargs): print('訪問_B ' + node.__class__.__name__) a = A() b = B() c = C() visitor = Visitor() visitor.visit(a) visitor.visit(b) visitor.visit(c)
運行結果如圖:
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
pytorch之torch_scatter.scatter_max()用法
這篇文章主要介紹了pytorch之torch_scatter.scatter_max()用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09Python first-order-model實現(xiàn)讓照片動起來
本文將利用first-order-model實現(xiàn)讓照片動起來,除了表情驅(qū)動照片,還可以姿態(tài)遷移。文中的示例代碼講解詳細,感興趣的可以嘗試一下2022-06-06