Software Design 2010年7月号《補足》#1: 図解(総天然色版)

小粒ちゃんねる
小粒ちゃんねる #小粒ch

《著》小粒ちゃん@湘南組、小粒ちゃん@博多組

Software Design 連載記事

ここでは、掲載記事に関する補足情報を公開しています。

老頭児(ロートル)エンジニアのつぶやき

GoFを反面教師に - Let's GoForward

  • リスト4 Visitor(GoFの場合)
class Rectangle(Geometry):
    def accept(self, visitor):
        visitor.visitRectangle(self)
class Circle(Geometry):
    def accept(self, visitor):
        visitor.visitCircle(self)
class Polygon(Geometry):
    def accept(self, visitor):
        visitor.visitPolygon(self)
  • リスト5 Visitor/GoForward
class Geometry:
    def accept(self, visitor):
        s = "visit%s"%self.__class__.__name__
        getattr(visitor, s)(self)

この手法は Smalltalk-80 から学びましたが、Python でも同様のイディオムを多用しています。PyPy では、lib-python/2.5.2/compiler/visitor.py 内のメソッド ASTVisitor.dispatch(48行目)がこれに該当します。

《余録》

記事では触れませんでしたが、同様の記述は「Expert Python Programming」でも紹介されています。PyPy のソースコードを見たときと同様に、Smalltalk-80 のデジャビューを見る思いがしたものです。

Expert Python Programming: Learn Best Practices to Designing, Coding, and Distributing Your Python Software

Expert Python Programming: Learn Best Practices to Designing, Coding, and Distributing Your Python Software

  • Chapter 14, Useful Design Patterns

原著を手にしたのは数か月前…かと思っていたら、すでに一年半以上も前のことでした。歳を重ねると、月日が経つのは早いもので…。


※ 最近、邦訳が出版されたようなので、こちらも参考にすると良いでしょう。

エキスパートPythonプログラミング

エキスパートPythonプログラミング

TOP


関連記事

  • @

Last updated♪2010/06/08