最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

輕松掌握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)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

最新評論

鱼台县| 永平县| 富源县| 北川| 奎屯市| 西贡区| 塔城市| 厦门市| 五莲县| 长阳| 岑溪市| 丘北县| 长乐市| 揭阳市| 马鞍山市| 屏山县| 中超| 商城县| 来宾市| 武山县| 方山县| 天津市| 冀州市| 农安县| 监利县| 肥东县| 逊克县| 浦东新区| 闵行区| 土默特左旗| 孟连| 安徽省| 阳原县| 宁陕县| 建宁县| 高雄市| 英吉沙县| 蕉岭县| 墨竹工卡县| 铅山县| 泰宁县|