【发布时间】:2019-11-13 06:32:03
【问题描述】:
我在 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 的类型应该使用什么(顺便说一句,将这个关键字用于作为参数的类是 Pythonic 吗?)?
谢谢
【问题讨论】:
-
请注意,您可以修改
cls,而不是从它继承。 -
cls是类的规范名称,例如作为classmethod的第一个参数。 “[...] 'cls' 是任何已知为类的变量或参数的首选拼写,尤其是类方法的第一个参数。”来自PEP8 -
对于只修改类而不创建新类型的典型类装饰器:Mypy 使用插件来实现这种行为。对于类装饰器,您可以使用 dataclass plugin 作为参考。对于 Pyright(Microsoft 的快速类型检查器),您可以使用 dataclass transforms。
标签: python python-3.x python-decorators mypy