Core Python Programming一书中关于该主题的示例Delegation似乎不起作用..或者我可能没有清楚地理解该主题..
下面是代码,其中类CapOpen包装了一个对象并定义了在模式下打开时file的修改行为。它应该只以大写形式写入所有字符串。filewrite
但是,当我尝试打开文件进行读取并对其进行迭代以打印每一行时,出现以下异常:
Traceback (most recent call last):
  File "D:/_Python Practice/Core Python Programming/chapter_13_Classes/
        WrappingFileObject.py", line 29, in <module>
    for each_line in f:
TypeError: 'CapOpen' object is not iterable
这很奇怪,因为虽然我没有明确定义迭代器方法,但我希望调用通过委托__getattr__给底层file对象。这是代码。我错过了什么吗?
class CapOpen(object):
    def __init__(self, filename, mode='r', buf=-1):
        self.file = open(filename, mode, buf)
    def __str__(self):
        return str(self.file)
    def __repr__(self):
        return `self.file`
    def write(self, line):
        self.file.write(line.upper())
    def __getattr__(self, attr):
        return getattr(self.file, attr)
f = CapOpen('wrappingfile.txt', 'w')
f.write('delegation example\n')
f.write('faye is good\n')
f.write('at delegating\n')
f.close()
f = CapOpen('wrappingfile.txt', 'r')
for each_line in f:   # I am getting Exception Here..
    print each_line,
我正在使用 Python 2.7。