Python3.1 セミナー課題 #052c

セミナー課題の中から、他の書籍でも紹介されている内容は、
受講者ではなくても閲覧できるように、ここに公開します。

《余録》抽象操作:デコレーター版
#! /usr/bin/env python
# coding: utf-8
## ----------------------------------------
##
## (C) Copyright 2000-2010, 小粒ちゃん《監修》小泉ひよ子とタマゴ倶楽部
##
## ----------------------------------------
# ..+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8

class Collection:
    def strip(e):
        if not e.isalpha() and e not in ",.\n":
            return " "
        else:
            return e

    def strip(e):
        if e.isalpha(): return e
        if e in ",.\n": return e
        return " "
            
    s = LinkedList(str.split.__doc__)
    print("".join(s.collect(strip)))
    print("".join(s.collect(lambda e: (" ",e)[e.isalpha()])))
    print("".join(s.collect(lambda e: ((" ",e)[e.isalpha()],e)[e in ",.\n"])))
    print("".join(s.select(str.isalpha)))

抽象操作を実現する

class LinkedList(Collection):
    def do(self, f):
        for e in self: f(e)        

    def collect(self, f):
        return [f(e) for e in self]

    def select(self, f):
        return [e for e in self if f(e)]

    def detect(self, f):
        for e in self:
            if f(e): return e

    def inject(self, f, v):
        s = v
        for e in self: s = f(s, e)
        return s

    def __repr__(self):
        s = self.collect(self)
        return "%s(%s)"%(self.__class__.__name__,",".join(s))

特殊 __repr__ メソッドは、collect 操作を使って簡潔に表現できます。

》作業中です《

Python 3 プログラミング徹底入門

Python 3 プログラミング徹底入門

  • 作者: マーク・サマーフィールド,Mark Summerfield,長尾高弘
  • 出版社/メーカー: ピアソン桐原
  • 発売日: 2009/12/01
  • メディア: 単行本
  • 購入: 1人 クリック: 61回
  • この商品を含むブログ (21件) を見る
8.2.5 でも「クラスデコレーター」を話題にしているので、比較するのも一興です。
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□


Last updated♪2010/01/19