AyakaCache¶
如果需要临时保存一些数据,以供应用在不同时刻/函数中使用,那么需要使用缓存
定义¶
将需要缓存的数据打包到一个类中,该类继承自AyakaCache
,编写方法参考pydantic.BaseModel
from ayaka import AyakaCache
class Cache(AyakaCache):
name:str = ""
age:int = 0
注意,一定要编写类型提示和默认值
代码 | 备注 |
---|---|
name:str = "" |
正确 |
name = "" |
错误 |
name:str |
错误 |
name |
错误 |
使用¶
放入回调的参数表中即可
@app.on_cmd("f1")
async def func_1(cache:Cache):
print(cache.name, cache.age)
@app.on_cmd("f2")
async def func_2(cache:Cache):
cache.age += 1
@app.on_cmd("f3")
async def func_3(cache:Cache):
cache.name = str(app.arg)
进阶:可以嵌套¶
可以嵌套其他BaseModel模型
from pydantic import BaseModel
from ayaka import AyakaCache, AyakaApp
app = AyakaApp("test")
class User(BaseModel):
name: str
age: int
class Cache(AyakaCache):
user: User = User(name="默认", age=0)
@app.on_cmd("f1")
async def func_1(cache: Cache):
print(cache.user.name)
@app.on_cmd("f2")
async def func_1(cache: Cache):
cache.user.name = "改名了"
<<< "user" 说:#f1
默认
<<< "user" 说:#f2
<<< "user" 说:#f1
改名了
其他用法(不推荐)¶
app.cache.name = "a"
print(app.cache.name) # a
- 缺乏类型提示
- 若读取操作在写入操作之前(执行前后顺序,不是代码顺序),会报错
下一步¶
在这里~ ↘