比较python中的不同类型

时间:2009-07-24 02:43:47

标签: python

首先是代码:

class myClass(object):
    def __cmp__(self, other):
        return cmp(type(self), type(other)) or cmp(self.__something, other.__something)

这是否与python中的其他类型产生相同的顺序?有没有正确的习语 对此?

Related question:

在谷歌上看一下我在python docs找到了一些相关的信息。引用:

  

实施说明:对象   除数字外的其他类型   按类型名称排序;对象   不支持的相同类型   适当的比较是由他们的   地址。

这表明如果我想遵循这种行为,我应该使用

class myClass(object):
    def __cmp__(self, other):
        return (cmp(self.__class__.__name__, other.__class__.__name) or 
                cmp(self.__something, other.__something))

特别不幸的是,我可能有一段非常困难的时间来保持dict s的传递性,这是我希望实施的一个特例。

我甚至需要检查我的论点类型吗? python甚至让我看到了吗?

2 个答案:

答案 0 :(得分:1)

不幸的是,Python 2支持这种“外星人”比较(幸运的是在Python 3中被废除)。模拟内置函数行为并不容易,因为它有很多特殊情况,例如float和int直接比较(没有类型比较覆盖,因为你编码)但复杂做任何比较(除了==和!=)总是提出异常。你真的需要模仿所有这些怪癖和摆动吗?这种需求是非常不寻常的。如果你的类型是“数字”(例如看十进制。十进制),我猜它需要与其他数字类型很好地搭配,但是不是“可比较数字”的类型具有较少的真实单词敏感约束......!< / p>

答案 1 :(得分:0)

你到底想要做什么?为什么要按类/类型对不同类的实例进行排序或比较?

如果您没有真正发布问题,很难提出解决方案。

您需要为自定义类定义自己的比较方法,并且在很大程度上取决于您确保执行的任何比较都有意义。

请解释你想要达到的目标。这可能不是Pythonic的方式。