streams.py
这个类定义了一个转换器方法,它期待子类来填充。它是一个抽象超类。以这种方法编写代码,读取器和写入器对象会内嵌在类实例中(组合),在提供转换器的逻辑,而不是传入一个转换器函数(继承)
class Processor:
def __init__(self,reader,writer):
self.reader = reader
self.writer = writer
def process(self):
while 1:
data = self.reader.readline()
if not data:break
data = self.converter(data)
self.writer.write(data)
def converter(self,data):
assert False,'converter must be defined'
converters.py
Uppercase类继承了类处理的循环逻辑(超类内所定的其他任何事情)它只所特有的事件:数据转换逻辑。
from streams import Processor
class Uppercase(Processor):
def converter(self,data):
return data.upper()
if __name__ == '__main__':
import sys
obj = Uppercase(open('spam.txt'),sys.stdout)
obj.process()