如何正确注释operator.gt的类型?

时间:2019-05-10 14:14:55

标签: python python-3.x mypy typehints

我有以下代码:

from typing import List
import operator


class A:

    def __init__(self, x: int) -> None:
        self.x = x

    def __gt__(self, other: "A") -> int:
        return 0 if self.x > other.x else -1


lst: List[A] = []
sorted(lst, key=operator.gt)

现在的问题是mypy将抱怨:

  

“已排序”的参数“键”具有不兼容的类型“ Callable [[Any,Any],Any]”;预期为“ Optional [Callable [[A],任何]]”

我假设operator.gt显然是这样注释的。

我的问题是,如何以这样一种方式注释:lstList[A],而mypy不会抱怨operator.gt

1 个答案:

答案 0 :(得分:1)

这与mypy和带有keyoperator.gt签名的所有内容无关:运算符采用两个参数(要比较的两件事),而key接受一个用于转换元素的参数。

换句话说:问题不是A vs. Any,而是[foo] vs [foo, foo]

您打算通过此关键功能实现什么?