Python3.1 セミナー課題 #052c
セミナー課題の中から、他の書籍でも紹介されている内容は、
受講者ではなくても閲覧できるように、ここに公開します。
- Smalltalk use: better, Smalltalk-80 セミナー: 基礎編, 1988.
- Java.use(better), Jython 導入セミナー, 2003.
- Python.use(better), Python2.4 セミナー: 基礎編, 2007.
《余録》抽象操作:デコレーター版
#! /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 操作を使って簡潔に表現できます。
》作業中です《
|
8.2.5 でも「クラスデコレーター」を話題にしているので、比較するのも一興です。 |
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ | □ |
Last updated♪2010/01/19