python - 如何正确注释 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
会抱怨:
“sorted”的参数“key”具有不兼容的类型“Callable[[Any, Any], Any]”;预期“可选[可调用[[A],任何]]”
我假设这operator.gt
显然是这样注释的。
我的问题是,我怎样才能以一种明确的方式进行注释,即lst
a List[A]
,并且mypy
不会抱怨operator.gt
?
解决方案
这与andmypy
的签名无关:运算符接受两个参数(要比较的两个事物),而接受一个用于转换元素的参数。key
operator.gt
key
换句话说:问题不在于A
vs. ,Any
而在于[foo]
vs.[foo, foo]
你想用这个关键功能实现什么?
推荐阅读
- json - Scala 对象、数据集和数据框之间的链接
- win2d - 使用 Win2D 是否可以在没有绘图会话的情况下获得文本大小?
- ios - 运行 ionic cordova build ios --prod 时出错
- python - 选择一个随机图像并为水印做 PIL
- python - 使用 Stripe 与 Angular 和 Django 创建新用户时,如何添加其他公司字段?
- c++ - C++/C:将字符串转换为初始化列表
- python - Python readlines() 返回空字符串
- python - i += x > 0 是什么意思?
- electron - 是否有相当于 ipcRender.invoke 的主进程?
- node.js - Axios 响应未正确执行