我有以下代码:
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
显然是这样注释的。
我的问题是,如何以这样一种方式注释:lst
是List[A]
,而mypy
不会抱怨operator.gt
?
答案 0 :(得分:1)
这与mypy
和带有key
和operator.gt
签名的所有内容无关:运算符采用两个参数(要比较的两件事),而key
接受一个用于转换元素的参数。
换句话说:问题不是A
vs. Any
,而是[foo]
vs [foo, foo]
。
您打算通过此关键功能实现什么?