当操作符重载__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。