比较Python中的两个日期对象:TypeError:’datetime.date’和’method’实例之间不支持’<'

这不应该太难,但我似乎无法让它工作.

我想在
Python中比较两个datetime.date类型,但我不断收到类型错误:

from datetime import date  

class Vacancy(object):
    def __init__(self, date): #date is a datetime string of format 2017-13-03T00.00.000Z
        self.date = datetime.strptime(date[:-1], '%Y-%m-%dT%H:%M:%S.%f').date()

    def getDate(self):
         return self.date


all_objects = [o1, o2, o3, o4, ...] #contains objects of type Vacancy
for o in all_objects:
    earliestDate = date(2020, 1, 1) 
    if o.getDate() < earliestDate:
        earliestDate = o.getDate()

print(earliestDate)

TypeError:’<‘ ‘datetime.date’和’method’的实例之间不支持 这对我没有意义,因为:
    print(type(earliestDate))和print(type(o.getDate()))都给出
< class’datetime.date’>

我能做错什么?

编辑:为all_objects中的对象添加了类示例代码

EDIT2:正如你们许多人所指出的那样,确实缺少'()’.在我的实际代码中,我通过执行earliestDate = o.getDate来分配值的方法instad.下次我会尝试对我的代码更加真实.感谢大家提供的见解,因为我确实来自Java,但我还没有完全理解Python.

最佳答案 TypeError应该为您提供解决此问题所需的所有信息.以下是解释它的方法:

TypeError: '<' not supported between instances of 'datetime.date' and 'method'

>’<‘不支持意味着您在使用 >比较不起作用,因为您要比较的事情之一不是datetime.date实例.你也已经有了这个.
>如果您使用o.getDate而不是o.getDate(),那么您将获得方法类型.在Python中,您可以根据需要传递方法作为值,就像lambdas或函数一样.但是,在这种情况下,这不是您想要的,因此请确保在想要调用方法的任何地方使用(),即使它不接受任何参数.
>错误消息中类型的顺序也很有趣. datetime.date出现在方法之前意味着日期在左侧,有问题的值在右侧.在您的情况下,earliestDate持有方法而不是datetime.date.
>现在我们知道最早的日期是问题,它在哪里更新? earliestDate = date(2020,1,1)显然是一个日期,但是earliestDate = o.getDate()怎么样?它使用括号,因此o.getDate()必须返回一个方法.
>鉴于您的代码,Vacancy将始终将self.date设置为日期,否则将抛出异常(类似于ValueError:时间数据’xxx’与格式’%Y-%m-%dT%H不匹配: %M:%S%F’).我猜你的代码看起来不一样,并且Vacancy的初始化在某种程度上是错误的.这是提供MCVE的好处:)

点赞