我在Python中使用类装饰器,无法弄清楚给我的类提供哪种类型的注释,以使 mypy 开心。
我的代码如下:
from typing import Type
from pprint import pformat
def betterrepr(cls:Type[object]):
"""Improve representation of a class"""
class improved_class(cls): # line 12
def __repr__(self) -> str:
return f"Instance of {cls.__name__}, vars = {pformat(vars(self))}"
return improved_class
我目前遇到以下2个错误:
myprog.py:12:错误:类型“ cls”无效
myprog.py:12:错误:无效的基类
cls
类型应该使用什么(顺便说一下,对于用作参数的类使用Python关键字是Pythonic吗?)?
谢谢
答案 0 :(得分:2)
将函数参数用作基类是currently not supported by mypy
。您唯一的选择是使用eventsource
注释或type: ignore
之类的虚拟别名来使错误静音。
即使没有注释base: Any = cls
,cls
也会正确地推断出用mypy
装饰的类的类型。要记录您的装饰器返回的类与装饰的类相似,请使用betterrepr
。
TypeVar