如何定义方法以充当Python同一类中其他方法的装饰器?

问题描述 投票:0回答:1

我正在构建具有insertupdateget等方法的简单JSON DB。>

我知道创建self._write()方法以写入json文件并在每种方法中都调用它很简单,但是有什么方法可以创建_write作为所有这些函数的装饰器,但是作为[ C0] class

我尝试过此方法,但没有设法将其包裹住:

Database

是否有可能编写类方法来充当装饰器,以将其用于同一类中定义的其他类方法?

我正在构建简单的JSON DB,它具有诸如insert,update和get等方法。我知道创建self._write()方法写入json文件并在每个方法中调用它都很简单,但是在那里...

python class decorator python-decorators
1个回答
0
投票

我设法解决了这个问题,但是最后,我只是选择将import pathlib import json DATABASE_PATH = pathlib.Path('/home/me/db.json') class Database: def __init__(self): self.data = dict() def _write(self): def decorator(f, *args, **kwargs): _response = f(**kwargs) # I'm assuming this would be `insert` method call ? with DATABASE_PATH.open(mode='w', encoding='utf-8') as _db: json.dump(self.data, _db, indent=4) # Calling `f` would modify `self.data` return _response return decorator @_write # Complaining function `_write` lacks positional argument self, but can't access it ? def insert(self, **kwargs): if all(k for k in kwargs if k in ('name', 'surname')): # Insert if contains all values. self.data.update(**kwargs) return True return False # Insert failed. 类提取为常规装饰器函数。

© www.soinside.com 2019 - 2024. All rights reserved.