__floor__和`__ceil__的类型注释

时间:2018-11-26 14:47:00

标签: python mypy

当操作符重载__floor____ceil__返回自定义类型时,是否可以使类型注释起作用?我希望它的工作方式与__round__类似,但对于地板操作员或ceil操作员似乎没有typing.SupportsRound的等效项。有SupportsFloat,但这是为了投射到float,这不是我想要的。

示例代码:

import math

class MyClass():

    def __floor__(self) -> 'MyClass':
        return self

def test_tmp() -> None:
    x = MyClass()
    result: MyClass = math.floor(x) # this causes a mypy error
    assert type(result) == MyClass # this passes in pytest

MyPy输出(从第10行开始):

  

错误:分配中的类型不兼容(表达式的类型为“ int”,变量的类型为“ MyClass”)   错误:“ floor”的参数1具有不兼容的类型“ MyClass”;预期的“ SupportsFloat”

版本号:Python 3.6.5,mypy 0.641。

0 个答案:

没有答案