带有特定参数的 Python 类型提示装饰器

问题描述

考虑一个获取类实例 self 并在调用装饰函数之前使用它的包装器:

def some_decorator(func: Callable[[Foo],None]):
    @functools.wraps(func)
    def wrap(self: Foo) -> None:
        # Logic requiring the use of self
        func(self)
    return wrap

class Foo:
    @some_decorator
    def bar(self) -> None:
        return None

bar 称为 Foo().bar() 应该等同于 Foo.bar(Foo()),但 PyCharm 的类型检查器抱怨前者:Parameter 'self' unfilled。从函数中移除装饰器后,类型检查器按预期工作,这两种方法被认为是等效的。

我怎样才能让类型检查器意识到两者是等价的,即使有装饰器,也没有问题?

请注意,我不考虑使用 def wrap(*args)func(*args) 作为解决方案,因为它完全避免了类型检查。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)