我正在构建具有insert
,update
和get
等方法的简单JSON DB。>
我知道创建self._write()
方法以写入json文件并在每种方法中都调用它很简单,但是有什么方法可以创建_write
作为所有这些函数的装饰器,但是作为[ C0] class
我尝试过此方法,但没有设法将其包裹住:
Database
是否有可能编写类方法来充当装饰器,以将其用于同一类中定义的其他类方法?
我正在构建简单的JSON DB,它具有诸如insert,update和get等方法。我知道创建self._write()方法写入json文件并在每个方法中调用它都很简单,但是在那里...
我设法解决了这个问题,但是最后,我只是选择将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.
类提取为常规装饰器函数。