我怎样才能暗示一个类型可以与类型比较呢

2024-06-16 08:37:29 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我想编写一个比较排序函数,我可以提示输入必须是一个带有Sequence[T](在本例中是MutableSequence[T])的序列。在

from typing import MutableSequence, T

def comparison_sort(s: MutableSequence[T]) -> None:
    pass

然而,似乎没有现成的方法来暗示T必须具有可比性。(没有ComparableOrderedtyping中的任何内容。)我如何才能做到这一点?我希望避免指定一组特定的类型,比如intfloat,'str`这样用户也可以暗示他们自己的类型是可比较的。在


Tags: 函数fromimportnonetyping类型排序def
1条回答
网友
1楼 · 发布于 2024-06-16 08:37:29

如注释中所述,Comparable不是一种存在状态,它只作为一对类型的描述符才有意义。通常情况下,排序函数使用的是同构类型,因此只要您不介意类型检查器只处理“支持某些类型的<”的概念,而不介意“使用任意类型支持<”,您就可以定义自己的Comparable,并用它绑定typingTypeVar。方便地,PEP484(它定义了typing提示)已经提供了an example of how you'd do this

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定义:

^{pr2}$

注意,我只需要定义__lt__;作为一个规则,Python完全按照__lt__实现自己的排序函数(它不使用任何其他丰富的比较运算符,甚至不使用{}),所以用同样的方式设计自己的算法是个好主意,因此{}可以处理的任何事情,都可以用同样的方式处理。在

相关问题 更多 >