Sakis Kasampalis 13 лет назад
Родитель
Сommit
bcaa897f80
1 измененных файлов с 26 добавлено и 30 удалено
  1. 26 30
      visitor.py

+ 26 - 30
visitor.py

@@ -1,38 +1,34 @@
 '''http://peter-hoffmann.com/2010/extrinsic-visitor-pattern-python-inheritance.html'''
 
-class Node(object): 
-    pass 
-class A(Node): 
-    pass 
-class B(Node): 
-    pass 
-class C(A,B): 
-    pass
+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         
-        for cls in node.__class__.__mro__:             
-            meth_name = 'visit_'+cls.__name__             
-            meth = getattr(self, meth_name, None)             
+class Visitor(object):
+    def visit(self, node, *args, **kwargs):
+        meth = None
+        for cls in node.__class__.__mro__:
+            meth_name = 'visit_'+cls.__name__
+            meth = getattr(self, meth_name, None)
+            if meth:
+                break
 
-            if meth:                 
-                break          
+        if not meth:
+            meth = self.generic_visit
+        return meth(node, *args, **kwargs)
 
-            meth = self.generic_visit         
-            return meth(node, *args, **kwargs)      
+    def generic_visit(self, node, *args, **kwargs):
+        print('generic_visit '+node.__class__.__name__)
 
-    def visit_B(self, node, *args, **kwargs):         
-        print 'visit_B '+node.__class__.__name__   
+    def visit_B(self, node, *args, **kwargs):
+        print('visit_B '+node.__class__.__name__)
 
-    def generic_visit(self, node, *args, **kwargs):         
-        print 'generic_visit '+node.__class__.__name__      
 
-if __name__ == '__main__':
-    a = A() 
-    b = B() 
-    # c = C() 
-    visitor = Visitor() 
-    visitor.visit(a) 
-    visitor.visit(b) 
-    # visitor.visit(c)
+a = A()
+b = B()
+c = C()
+visitor = Visitor()
+visitor.visit(a)
+visitor.visit(b)
+visitor.visit(c)