类装饰器上的Mypy注释

时间:2019-07-02 15:05:29

标签: python python-3.x python-decorators mypy

我在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吗?)?

谢谢

1 个答案:

答案 0 :(得分:2)

将函数参数用作基类是currently not supported by mypy。您唯一的选择是使用eventsource注释或type: ignore之类的虚拟别名来使错误静音。

即使没有注释base: Any = clscls也会正确地推断出用mypy装饰的类的类型。要记录您的装饰器返回的类与装饰的类相似,请使用betterrepr

TypeVar