
B = TypeVar("B", bound="Bot") R = TypeVar("R") P = ParamSpec("P") class API(Generic[B, P, R]): def __init__(self, func: Callable[Concatenate[B, P], Awaitable[R]]) -> None: self.func = func def __set_name__(self, owner: Type[B], name: str) -> None: self.name = name @overload def __get__(self, obj: None, objtype: Type[B]) -> "API[B, P, R]": ... @overload def __get__( self, obj: B, objtype: Optional[Type[B]] ) -> Callable[P, Awaitable[R]]: ... def __get__( self, obj: Optional[B], objtype: Optional[Type[B]] = None ) -> "API[B, P, R] | Callable[P, Awaitable[R]]": if obj is None: return self return partial(obj.call_api, self.name) # type: ignore async def __call__(self, inst: B, *args: P.args, **kwds: P.kwargs) -> R: return await self.func(inst, *args, **kwds) 被上面这个装饰器装饰过后就没有参数提示了... 在不换 IDE 的情况下该怎么做
1 so1n 2024-08-21 23:06:41 +08:00 好像只有 vscode 的才支持 |
2 Maerd 2024-08-22 17:21:30 +08:00 这不是装饰器的问题,pycharm 对装饰器协议支持还是蛮好的,但是对__get__这类的描述器协议就无力支持了,这两年 pylance 要比 pycharm 的语言服务器显著好用 |
3 yuban10703 OP @Maerd pycharm 无解了么 |