在ContextVar上调用get方法时,是否可以输入结果?
类似这样的东西
from contextvars import ContextVar
my_var : ContextVar[MyType] = ContextVar('my_var', default=None)
因此,稍后我可以在调用get方法之后在我的IDE中输入提示(intellisense)
current_val = my_var.get() # Now the IDE knows the type because of the generic
是否存在类似的东西,还是我应该在python repo(或mypy repo?)中更好地创建问题?
答案 0 :(得分:0)
我有一个 contextvars 的替代包——我在过去几周回来开发它——主要思想是拥有一个比“contetvars”get/set/copy_context/run 语义更友好的界面——第一个完全实现的类的工作方式类似于 threading.local
,作为任意命名空间。
我还没有想到类型提示/猜测 - 但看到你的问题,它确实是这样工作的:
from extracontext import ContextLocal
class MyContext(ContextLocal):
my_var: MyType
other_var: OtherType
mycontext = MyContext() # use this as the namespace:
mycontext.my_var = 20
mycontext._run(my_function) # the same as contextvars.Context.run -
# the instance can also be used in a context-manager block ("with" statement)
# or as a decorator to sync functions that need separate contexts.
# independent context values for new threads or async-tasks is automatic)
它会自然而然地工作。
唯一的一点是 extracontext
尚未发布 (2021-03-09),您必须从 git 安装:
pip install -U git+https://github.com/jsbueno/extracontext.git@0.2b2
这个版本有 asyncio-local 上下文类的纯 Python 实现,它将数据存储在运行框架闭包中,使用 f_locals 作为映射 - 我正在研究一个上下文变量支持的类,它将保留大致相同的语义。