gpt4 book ai didi

python - 检查一个对象是否在 python 中是可订购的?

转载 作者:太空狗 更新时间:2023-10-29 23:59:24 24 4
gpt4 key购买 nike

如何在 Python 中检查对象是否可排序/可排序?

我正在尝试为我的二叉树类的 __init__ 方法实现基本类型检查,我希望能够检查节点的值是否可排序,并抛出错误如果不是的话。这类似于在哈希表的实现中检查可哈希性。

我正在尝试完成类似于 Haskell 的 (Ord a) => 等 限定词的事情。 Python 中是否有类似的检查?

最佳答案

如果您想知道一个对象是否可排序,您必须检查它是否实现了必要的比较方法。

Python 2.X 中,有两种不同的方法来实现这些方法:

  1. cmp 方法(每个示例等同于 Java 中的 compareTo)

    __cmp__(self, other):返回 >0、0 或 <0 self 大于、等于或小于 other

  2. 丰富的对比方法

    __lt__, __gt__, __eq__, __le__, __ge__, __ne__

    sort() 函数调用此方法在实例之间进行必要的比较(实际上排序只需要 __lt____gt__ 方法,但建议实现所有这些方法)

Python 3.X 中,移除了 __cmp__ 以支持丰富的比较方法,因为用不止一种方法来做同样的事情确实违反了 Python 的“法则” ".

因此,您基本上需要一个函数来检查这些方法是否由类实现:

# Python 2.X
def is_sortable(obj):
return hasattr(obj, "__cmp__") or \
hasattr(obj, "__lt__") or \
hasattr(obj, "__gt__")

# Python 3.X
def is_sortable(obj):
cls = obj.__class__
return cls.__lt__ != object.__lt__ or \
cls.__gt__ != object.__gt__

Python 2 和 3 需要不同的函数,因为在 Python 3 中,关于未绑定(bind)方法、方法包装器和其他内部事物的很多其他事情也发生了变化。

阅读此链接您希望更好地理解 Python 中的可排序对象:

PS:这是对我的第一个答案的完全重新编辑,但是当我更好地调查问题并且对它有更清晰的想法时需要它:)

关于python - 检查一个对象是否在 python 中是可订购的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19614260/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com