【发布时间】:2021-03-17 00:40:22
【问题描述】:
我有很多方法需要打开一些文件(每种方法都有不同),做一些事情,关闭它。尽管可以在每个方法中打开和关闭文件,但我想知道是否可以通过装饰器来实现,以便装饰器可以将方法作为参数,将数据加载到装饰类正在作用的 obj 属性中.
class Foo:
def __init__(self, fname):
self.fname = fname
def load_file(self):
with open(self.fname, 'rb') as f:
self.file_ = pickle.load(f)
def do_some_work(self):
self.load_file()
... # some calculation and so on
delattr(self, 'file_')
@loader(self.load_file)
def do_some_work_decorated(self):
... # only some calculation and so on, file loading is done by the defined method in decorator
我的问题是这是否可能,有没有更好的方法来解决它?
【问题讨论】:
-
我看到你已经为你的问题发布了一个答案,但我真的不认为你已经描述了你到底想要做什么(除了“试图通过装饰方法”)。是不是你想用装饰器做的文件的打开和处理和关闭?你能详细说明一下吗?
-
@fountainhead:我认为这个问题很清楚——OP 希望在多种方法的开头进行一些常见的预处理,并想知道是否有办法使用装饰器来实现。我同意这似乎是一个奇怪的问题,因为这样做比在需要它的开头显式调用方法要多得多——所以也许它是一个XY Problem。
标签: python python-3.x oop python-decorators contextmanager