2009-07-24 122 views
4

首先代码:Python中比较不同类型

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

这是否产生同样的排序为其他类型的蟒蛇?这是否有一个正确的成语 ?

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)) 

尤其不幸的是,我可能有一个非常困难的时期mantaining传递与dict s,这是一个特殊的情况下,我本来希望落实的。

我甚至需要检查我的参数类型吗? python甚至让我看到这个?

+0

你能否详细说明这个问题。 '你的意思是'产生与python中其他类型相同的顺序'? – 2009-07-24 03:46:06

回答

1

不幸的是,Python 2支持这种“外来”比较(幸运的是在Python 3中被废止)。模拟内建行为并不容易,因为它有很多特殊情况,例如float和int直接比较(没有类型比较覆盖,因为它有编码),但是复杂的进行任何比较(==和!=除外)总是提出一个例外。 真的需要模拟所有这些怪癖和扭动吗?这种需求将非常不寻常。如果你的类型是“数字”(例如查看decimal.Decimal),我认为它需要和其他数值类型一起使用,但是不是“可比数字”的类型具有较少的实际字面限制。

0

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

当您尚未实际发布问题时,很难提出解决方案。

您需要为自定义类定义自己的比较方法,并且主要由您来确保您执行的任何比较都有意义。

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