Python 不同类型对象的比较
对于不同类型的对象的排序,建议的Python语义是什么?换句话说,当自定义编写的比较方法(例如使用Python 不同类型对象的比较,python,comparison,compare,Python,Comparison,Compare,对于不同类型的对象的排序,建议的Python语义是什么?换句话说,当自定义编写的比较方法(例如使用\uult\uuuu,但也可能在使用Python 2中的“差”比较\uuu cmp\uuu时)遇到与self不同类型的对象时,应该实现什么行为 一个人是否应该创造一种秩序,例如“所有意外的对象比我自己的类型都少” 是否应该抛出一个类型错误 有没有什么简单的方法可以让另一个对象尝试一下,例如,如果一个对象做了foo
\uult\uuuu
,但也可能在使用Python 2中的“差”比较\uuu cmp\uuu
时)遇到与self
不同类型的对象时,应该实现什么行为
类型错误
foo
和foo.\uuu lt\uuuu
不知道bar
的类型,它能退回到bar.\uu gt\uuu
3<“3”
显然,在如何实现方面留下了很多自由,但我希望可能会有一些指导原则来帮助实现互操作性。在写问题时,“类似问题”列表让我意识到了这一点。它将
NotImplemented
作为丰富比较的返回值(不例外)。在文档中搜索此关键字也会找到相关部分:
:
未实现
–此类型有一个值。只有一个对象具有此值。此对象通过内置名称NotImplemented
访问。如果数值方法和富比较方法没有对提供的操作数执行操作,则它们可能返回此值。(然后,解释器将尝试反射操作或其他回退,具体取决于运算符。)其真值为true
以及:
如果富比较方法没有对给定的一对参数执行操作,它可能会返回singletonNotImplemented
。按照惯例,将返回False
和True
以进行成功比较。但是,这些方法可以返回任何值,因此如果在布尔上下文中使用比较运算符(例如,在if语句的条件下),Python将调用该值来确定结果是真还是假
:
如果函数无法比较对象的特定组合,则应返回对Py\u NotImplemented
的新引用
这回答了第2点。三,。对于我最初的问题,至少对于丰富的比较场景。\uuucmp\uuuuu
的文档根本没有提到未实现
,这可能是我一开始错过的原因。因此,这是转向丰富比较的另一个原因
我仍然不确定返回该值是否比创建订单更可取。我想很大程度上取决于另一个物体可能有什么想法。我担心,为了实现任何类型的合理排序,可能需要大量的合作。但也许其他人可以对我问题的其他部分提供更多的信息