比较python中的类实例

时间:2012-01-08 17:57:11

标签: python

我在python中构建了一个新类,它定义了6个数字的时间(例如18:45:00)

class Time(object):

    def __init__(self, hour, minute, second):
        minute = minute + second / 60
        hour = hour + minute / 60        
        self.hour = hour % 24
        self.minute = minute % 60
        self.second = second  % 60

我还定义了许多方法来使其正常工作。 我遇到的问题是cmp方法:

def __cmp__(self,other):
    return cmp(self.to_seconds(),other.to_seconds())

当我尝试比较时间时它工作正常,如果我按时间排序它也可以正常工作。但是,如果我正在尝试排序时间和整数或字符串列表,它也可以工作。 我如何定义它以仅比较时间,如果试图将时间与非时间进行比较则提高和误差。

3 个答案:

答案 0 :(得分:4)

您可以使用isinstance()查看参数是否是某个类的实例。请参阅documentation

答案 1 :(得分:3)

您需要在__cmp__中执行类型检查,然后采取相应措施。

例如,可能是这样的:

import numbers

def __cmp__(self, other):
    other_seconds = None
    if hasattr(other, "to_seconds"):
        other_seconds = other.to_seconds()
    elif isinstance(other, numbers.Real):
        other_seconds = other

    if seconds is None:
        return NotImplemented

    return cmp(self.to_seconds(), seconds)

答案 2 :(得分:3)

def __cmp__(self, other):
  if not isinstance(other, Time):
    return NotImplemented
  return cmp(self.to_seconds(), other.to_seconds())

NotImplemented是未定义比较操作的常量:http://docs.python.org/library/constants.html