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