首页 > 解决方案 > 装饰器从标准输出中保存文本文件

问题描述

受此Q/A的启发,以下内容就像一个魅力:

from contextlib import redirect_stdout
def save_summary(model, filename):
    with open(filename, 'w') as f:
        with redirect_stdout(f):
            model.summary()        
    return 

save_summary(model, 'model_sum.txt')

现在,为了使代码更具可重用性,我想创建一个装饰器,它可以使任何产生打印语句的方法将该打印语句保存为文本文件。

def decorator(obj, method, filename):
    def inner(obj, method, filename):
        with open(filename, 'w') as f:
            with redirect_stdout(f):
                obj.method()        
        return
    return inner
    
@decorator
def save_text(obj, method, filename):
    obj.method()

save_text(model, summary, 'summary.txt')         

返回的错误是TypeError: decorator() missing 1 required positional argument: 'filename'

问题,我敢肯定,我对装饰器的工作方式知之甚少,除了重复函数调用等琐碎的例子。我应该如何更改此代码,以使装饰器正常工作?为什么它认为它缺少位置参数?我不认为这是真的。

标签: pythontensorflowtextdecorator

解决方案


推荐阅读