为什么提示找不到flush()方法

import sys

class Logger:
    def __init__(self,file):
        self.terminal = sys.stdout
        self.log = open (file,"w+")

    def write(self,message):
        self.terminal.write(message)
        self.log.write(message)
        self.log.flush()

sys.stdout=Logger('log_file.txt')

print("yes")

按如上的写法,可以实现同时输出yes 到终端和屏幕。
但是会报错: AttributeError: ‘Logger’ object has no attribute ‘flush’

除非给Logger加一个flush的方法。
还是有点蒙,self.log 已经被定义为一个文件,应该已经包含 flush方法才对,为什么会提示Logger没有flush方法?

Jason990420
最佳答案

sys.stdout 需要一个类似文件的对象, 现在指定为Logger对象, 它会调用它的write以及flush方法, 事实上, Logger 确实没有定义flush方法.

class Logger:
    def __init__(self, file):
        self.terminal = sys.stdout
        self.log = open(file,"w+")

    def write(self, message):
        self.terminal.write(message)
        self.log.write(message)
        self.log.flush()

    def flush(self):        # 这情况下, 不需要作任何事
        pass
2年前 评论
讨论数量: 2
Jason990420

sys.stdout 需要一个类似文件的对象, 现在指定为Logger对象, 它会调用它的write以及flush方法, 事实上, Logger 确实没有定义flush方法.

class Logger:
    def __init__(self, file):
        self.terminal = sys.stdout
        self.log = open(file,"w+")

    def write(self, message):
        self.terminal.write(message)
        self.log.write(message)
        self.log.flush()

    def flush(self):        # 这情况下, 不需要作任何事
        pass
2年前 评论

Thanks, 也就是sys.stdout 默认必须用到write 和flush 两个方法。

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!