代码之家  ›  专栏  ›  技术社区  ›  SingleNegationElimination

比较python中的不同类型

  •  4
  • SingleNegationElimination  · 技术社区  · 16 年前

    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 回复  |  直到 9 年前
        1
  •  1
  •   Alex Martelli    16 年前

    不幸的是,Python2确实支持这种“外来”比较(幸运的是,Python3取消了这种比较)。模拟内置行为并不容易,因为它有很多特殊情况,例如float和int直接比较(没有编码的类型比较覆盖),但是complex使得任何比较(除了==和!=)总是引发异常。你…吗

        2
  •  0
  •   wbg    16 年前

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

    当你还没有发布问题的时候,很难提出解决方案。

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

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