如何正确注释 operator.gt 的类型?
How to correctly annotate type for operator.gt?
我得到了以下代码:
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
会抱怨:
Argument "key" to "sorted" has incompatible type "Callable[[Any, Any], Any]"; expected "Optional[Callable[[A], Any]]"
我假设 operator.gt
显然是这样注释的。
我的问题是,我怎样才能以这样一种方式进行注释,即 lst
也是一个 List[A]
,并且 mypy
不会抱怨 operator.gt
]?
这与 mypy
以及带有 key
和 operator.gt
签名的所有内容无关:运算符采用两个参数(要比较的两个参数),而 key
采用单个参数来转换元素。
换句话说:问题不是A
vs. Any
,而是[foo]
vs [foo, foo]
.
你想用这个关键功能实现什么?
我得到了以下代码:
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
会抱怨:
Argument "key" to "sorted" has incompatible type "Callable[[Any, Any], Any]"; expected "Optional[Callable[[A], Any]]"
我假设 operator.gt
显然是这样注释的。
我的问题是,我怎样才能以这样一种方式进行注释,即 lst
也是一个 List[A]
,并且 mypy
不会抱怨 operator.gt
]?
这与 mypy
以及带有 key
和 operator.gt
签名的所有内容无关:运算符采用两个参数(要比较的两个参数),而 key
采用单个参数来转换元素。
换句话说:问题不是A
vs. Any
,而是[foo]
vs [foo, foo]
.
你想用这个关键功能实现什么?