如注释中所述,
Comparable这不是存在的状态,它仅作为一对类型的描述符才有意义。通常情况下,一个排序功能正在与同质类型的,所以只要你不介意的类型检查只是处理的“支持的概念
<与某些类型的”,而不是“支持
<任意类型”,您可以定义自己
Comparable和绑定一个
typing
TypeVar。方便地,PEP484(定义了
typing提示)已经提供了如何执行此操作的示例:
from abc import ABCmetafrom typing import Any, TypeVarclass Comparable(metaclass=ABCmeta): @abstractmethod def __lt__(self, other: Any) -> bool: ...CT = TypeVar('CT', bound=Comparable)然后,您可以将其用于
comparable_sort定义:
def comparable_sort(s: MutableSequence[CT]) -> None:
注意,我只需要
__lt__定义即可;通常,Python
3完全根据
__lt__(不使用任何其他丰富的比较器运算符,甚至不使用†
__eq__)来实现自己的排序功能,所以以相同的方式设计自己的算法是一个好主意,因此可以处理,您可以以相同的方式处理。
sorted
†:Python 2最初
__le__在至少一个地方(
heapq)使用,但是
__lt__在Python
3时间范围内,有意地,始终如一地使用了内置函数和标准库,并且您的键入样式始终是Python 3。



