在python中使用户定义的类可排序和/或可哈希化时,需要重写/实现哪些方法?
需要注意的陷阱是什么?
我在解释器中输入dir({})
以获得内置字典的方法列表。其中,我认为我需要一些实现
['__cmp__', '__eq__', '__ge__', '__gt__', '__hash__', '__le__', '__lt__', '__ne__']
与Python2相比,必须为Python3实现哪些方法有区别吗?
最佳答案
我差点把它作为对其他答案的评论,但这本身就是一个答案。
为了使您的项目可排序,它们仅需要实现__lt__
。这是内置排序使用的唯一方法。
仅当您确实想在类中使用比较运算符时,才需要其他比较或functools.total_ordering
。
为了使您的项目可散列,您可以像其他人一样实现__hash__
。您还应该以兼容的方式实现__eq__
-等效项应哈希相同。