在python中使用户定义的类可排序和/或可哈希化时,需要重写/实现哪些方法?

需要注意的陷阱是什么?

我在解释器中输入dir({})以获得内置字典的方法列表。其中,我认为我需要一些实现

['__cmp__', '__eq__', '__ge__', '__gt__', '__hash__', '__le__', '__lt__', '__ne__']

与Python2相比,必须为Python3实现哪些方法有区别吗?

最佳答案

我差点把它作为对其他答案的评论,但这本身就是一个答案。

为了使您的项目可排序,它们仅需要实现__lt__。这是内置排序使用的唯一方法。

仅当您确实想在类中使用比较运算符时,才需要其他比较或functools.total_ordering

为了使您的项目可散列,您可以像其他人一样实现__hash__。您还应该以兼容的方式实现__eq__ -等效项应哈希相同。

09-30 15:37
查看更多