【发布时间】:2019-04-28 03:27:12
【问题描述】:
网上没有很多关于使类型注释与__round__ 一起工作的详细信息。我已经实现了这一点,但是当我运行 mypy 时,我仍然在第 16 行遇到错误(在没有 ndigits 参数的情况下调用 round):
错误:赋值类型不兼容(表达式类型为“int”,变量类型为“MyClass”)
测试通过,即在对round 的两次调用中,我返回了一个MyClass 类型的对象。但是只有当我在没有参数的情况下调用 round 时,MyPy 检查才会失败。
版本号:Python 3.6.5,mypy 0.641。
from typing import Any, SupportsRound, overload
class MyClass(SupportsRound['MyClass']):
def __round__(self: 'MyClass', ndigits: int = 0) -> 'MyClass':
return self
def test_tmp() -> None:
x = MyClass()
result: MyClass
result = round(x, 0)
assert type(result) == MyClass
result = round(x)
assert type(result) == MyClass
【问题讨论】: