In [32]: object() > 0
Out[32]: True
実際、それは私が試したどの整数よりも大きいです。
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
、比較できないためではありませbool
んfloat
complex
また、古いスタイルのクラスのオブジェクト(名前付きオブジェクト)は、奇妙な理由でその間にinstance
とどまります。None
Numbers
オブジェクトのアドレスを比較しています。C/C++ を知っている場合、これはポインター演算です。
>>> object() < object()
True
>>> object() > object()
False
最初の例では、最初の object() がたまたま 2 番目の object() よりも先にメモリに割り当てられているため、他のオブジェクトよりも「少ない」ことになります。
いずれにしても、このようなポインターを比較するべきではありません。:)