本文實例為大家分享了python訪問者模式代碼,供大家參考,具體內容如下
"""訪問者模式"""class Node(object): passclass A(Node): passclass B(Node): passclass C(A, B): passclass Visitor(object): def visit(self, node, *args, **kwargs): meth = None """python支持多重繼承,在解析父類的__init__時,定義解析順序的是子類的__mro__屬性,內容為一個存儲要解析類順序的元組。""" """觀察到,super的執行路徑和類的__mro__列舉的類順序吻合;而__mro__的順序可以看作是深搜的結果""" for cls in node.__class__.__mro__: """方法名""" meth_name = 'visit_' + cls.__name__ """getattr()函數是Python自省的核心函數,具體使用大體如下: 獲取對象引用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)運行結果如圖:

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。
新聞熱點
疑難解答
圖片精選