您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

轻松掌握python设计模式之访问者模式

5b51 2022/1/14 8:18:37 python 字数 3985 阅读 353 来源 www.jb51.cc/python

本文实例为大家分享了python访问者模式代码,供大家参考,具体内容如下 \"\"\"访问者模式\"\"\"

概述

本文实例为大家分享了python访问者模式代码,供大家参考,具体内容如下

"""访问者模式"""
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__属性内容一个存储要解析类顺序的元组。"""
    """观察到,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,**kwargs)

  def generic_visit(self,**kwargs):
    print('通常访问: ' + node.__class__.__name__)

  def visit_B(self,**kwargs):
    print('访问_B ' + node.__class__.__name__)

a = A()
b = B()
c = C()
visitor = Visitor()
visitor.visit(a)
visitor.visit(b)
visitor.visit(c)

运行结果如图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

总结

以上是编程之家为你收集整理的轻松掌握python设计模式之访问者模式全部内容,希望文章能够帮你解决轻松掌握python设计模式之访问者模式所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶