5
In [32]: object() > 0
Out[32]: True

実際、それは私が試したどの整数よりも大きいです。

4

2 に答える 2

12

Python 2.xは、(意味がない場合でも)異なるタイプのオブジェクト間の比較を利用できるようにしようとしたためです。

Python3で修正されました。

>>> object() > 0
Traceback (most recent call last):
  File "<pyshell#320>", line 1, in <module>
    object() > 0
TypeError: unorderable types: object() > int()

Python 2.xで使用される順序:

None < Numbers < [Other types in alphabetical order]

数字は:ですがint、比較できないためではありませboolfloatcomplex

また、古いスタイルのクラスのオブジェクト(名前付きオブジェクト)は、奇妙な理由でその間にinstanceとどまります。NoneNumbers

于 2012-07-19T04:17:19.917 に答える
2

オブジェクトのアドレスを比較しています。C/C++ を知っている場合、これはポインター演算です。

>>> object() < object()
True
>>> object() > object()
False

最初の例では、最初の object() がたまたま 2 番目の object() よりも先にメモリに割り当てられているため、他のオブジェクトよりも「少ない」ことになります。

いずれにしても、このようなポインターを比較するべきではありません。:)

于 2012-07-19T04:24:14.680 に答える