问题描述
考虑一个获取类实例 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 (将#修改为@)