如注释中所述,Comparable
这不是存在的状态,它仅作为一对类型的描述符才有意义。通常情况下,一个排序功能正在与同质类型的,所以只要你不介意的类型检查只是处理的“支持的概念<
与某些类型的”,而不是“支持<
任意类型”,您可以定义自己Comparable
和绑定一个typing
TypeVar
。方便地,PEP484(定义了typing
提示)已经提供了如何执行此操作的示例:
from abc import ABCMeta
from typing import Any, TypeVar
class 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。