Python 不同类型对象的比较

Python 不同类型对象的比较,python,comparison,compare,Python,Comparison,Compare,对于不同类型的对象的排序,建议的Python语义是什么?换句话说,当自定义编写的比较方法(例如使用\uult\uuuu,但也可能在使用Python 2中的“差”比较\uuu cmp\uuu时)遇到与self不同类型的对象时,应该实现什么行为 一个人是否应该创造一种秩序,例如“所有意外的对象比我自己的类型都少” 是否应该抛出一个类型错误 有没有什么简单的方法可以让另一个对象尝试一下,例如,如果一个对象做了foo

对于不同类型的对象的排序,建议的Python语义是什么?换句话说,当自定义编写的比较方法(例如使用
\uult\uuuu
,但也可能在使用Python 2中的“差”比较
\uuu cmp\uuu
时)遇到与
self
不同类型的对象时,应该实现什么行为

  • 一个人是否应该创造一种秩序,例如“所有意外的对象比我自己的类型都少”
  • 是否应该抛出一个
    类型错误
  • 有没有什么简单的方法可以让另一个对象尝试一下,例如,如果一个对象做了
    foo
    foo.\uuu lt\uuuu
    不知道
    bar
    的类型,它能退回到
    bar.\uu gt\uuu
  • 关于如何对不同类型的对象进行合理的排序(最好是a,但可能更少),有什么指导方针吗
  • 文档中是否有任何部分解释了为什么
    3<“3”

  • 显然,在如何实现方面留下了很多自由,但我希望可能会有一些指导原则来帮助实现互操作性。

    在写问题时,“类似问题”列表让我意识到了这一点。它将
    NotImplemented
    作为丰富比较的返回值(不例外)。在文档中搜索此关键字也会找到相关部分:

    :

    未实现
    –此类型有一个值。只有一个对象具有此值。此对象通过内置名称
    NotImplemented
    访问。如果数值方法和富比较方法没有对提供的操作数执行操作,则它们可能返回此值。(然后,解释器将尝试反射操作或其他回退,具体取决于运算符。)其真值为true

    以及:

    如果富比较方法没有对给定的一对参数执行操作,它可能会返回singleton
    NotImplemented
    。按照惯例,将返回
    False
    True
    以进行成功比较。但是,这些方法可以返回任何值,因此如果在布尔上下文中使用比较运算符(例如,在if语句的条件下),Python将调用该值来确定结果是真还是假

    :

    如果函数无法比较对象的特定组合,则应返回对
    Py\u NotImplemented
    的新引用

    这回答了第2点。三,。对于我最初的问题,至少对于丰富的比较场景。
    \uuucmp\uuuuu
    的文档根本没有提到
    未实现
    ,这可能是我一开始错过的原因。因此,这是转向丰富比较的另一个原因

    我仍然不确定返回该值是否比创建订单更可取。我想很大程度上取决于另一个物体可能有什么想法。我担心,为了实现任何类型的合理排序,可能需要大量的合作。但也许其他人可以对我问题的其他部分提供更多的信息