Python做无比的对象存在吗?

时间:2013-06-29 12:29:28

标签: python

Python中是否存在无法比较的对象?

我特别询问技术上不可能进行比较操作的对象。我正在编写一个列表实用程序函数。我可以假设每个列表都是可排序的吗?

2 个答案:

答案 0 :(得分:6)

在Python 2中,在所有对象中定义了总排序。即使是不同类型的对象,也不仅可以与==!=进行比较,还可以与<>进行比较。不同类型的对象在某种程度上被任意比较,因为它们的类型的身份“较少”,因此1 < "2"将返回任意但一致的结果。这有一个有用的属性,允许对异类对象进行排序。

用户定义的对象仍然可以在比较方法中引发异常,例如__lt____gt__等。例如:

>>> np.array([1, 2, 3]) < np.array([1, 2])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: operands could not be broadcast together with shapes (3) (2) 

Python 3更严格:它不允许对无法进行有意义比较的内置对象进行总排序,因此1 < "2"会引发TypeError。当然,仍然允许与==!=进行比较。

答案 1 :(得分:1)

是的,他们这样做。

class Foo(object):
    def __cmp__(self, o):
        raise TypeError("I'm incomperable!")

foo1 = Foo()
foo2 = Foo()
print(foo1 < foo2)