一种选择是在代码中的所有点上执行文件写入,其中
dict
被修改。
另一种方法是与decorator一起使用自定义方法对字典进行任何更改。这看起来像是:
import json
import functools
# decorator to save functions return value to a file.
def decorated_change(func):
@functools.wraps(func)
def wrap(*args, **kwargs):
f = func(*args, **kwargs)
with open('file.txt', 'w') as file:
file.write(json.dumps(f))
return wrap
@decorated_change
def set_dict_entry(dict, key, value):
dict[key] = value
理想情况下,您可以创建自己的dictionary类,并对
设置项
方法如下:
class modified_dict(dict):
@some_decorator
def __setitem__(self, i, y):
super().__setitem__
另外,正如其他人所指出的,你可以干脆放弃所有的装饰:
class modified_dict(dict):
def __setitem__(self, key, value):
super().__setitem__(key, value)
with open('file.txt', 'w') as f:
file.write(json.dumps(f, indent=4, sort_keys=True))
但是如果您计划在其他数据结构上应用这种类型的机制,那么最好与decorator一起遵守DRY原则。