Anduvimos buscando por diferentes foros para de esta forma tenerte la respuesta para tu dilema, si continúas con inquietudes puedes dejarnos tu pregunta y te respondemos sin falta, porque estamos para ayudarte.
Solución:
El TypeError
debería darle toda la información que necesita para resolver este problema. He aquí cómo interpretarlo:
TypeError: '<' not supported between instances of 'datetime.date' and 'method'
- El
'<' not supported
significa que obtuvo el error al usar el<
operador, como ya sabes. - La comparación no funciona porque una de las cosas que está comparando no es una
datetime.date
ejemplo. Tú también tienes esto. - El
method
tipo es lo que obtienes si usaraso.getDate
en vez deo.getDate()
. En Python, puede pasar métodos como valores si lo desea, como lambdas o funciones. Sin embargo, esto no es lo que desea en este caso, así que asegúrese de usar()
en cualquier lugar al que desee llamar a un método, incluso si no toma ningún argumento. - El orden de los tipos en el mensaje de error también es interesante. Ese
datetime.date
viene antesmethod
significa que la fecha fue en el izquierda lado y el valor problemático estaba en el derecho lado. En tu caso, elearliestDate
está sosteniendo unmethod
en vez de unadatetime.date
. - Ahora que sabemos que
earliestDate
es el problema, donde se actualiza?earliestDate = date(2020, 1, 1)
es claramente una cita, pero ¿qué talearliestDate = o.getDate()
? Está usando paréntesis, así queo.getDate()
debe estar devolviendo unmethod
. - Dado su código, el
Vacancy
siempre tendráself.date
establecido en una fecha, o se lanzará una excepción (algo comoValueError: time data 'xxx' does not match format '%Y-%m-%dT%H:%M:%S.%f'
). Supongo que su código se ve diferente y la inicialización deVacancy
está mal de alguna manera. Este es el beneficio de proporcionar un MCVE 🙂
Sobrescribió la definición de fecha, intente esto (manteniendo el espacio de nombres de fecha y hora con un alias: dt). Una buena práctica sería no nombrar variables locales o miembro con el mismo nombre de funciones y objetos de las bibliotecas que importa (importó la fecha de datetime y luego usó date
como argumento del init).
import datetime as dt
class Vacancy(object):
def __init__(self, date):
self.date = date
def getDate(self):
return self.date
all_objects = [o1, o2, o3, o4, ...] #contains objects of type Vacancy
for o in all_objects:
earliestDate = dt.date(2020, 1, 1)
if o.getDate() < earliestDate:
earliestDate = o.getDate()
print(earliestDate)
Una observación adicional es que en Python no hay necesidad de definir getters y setters, ya que las variables son públicas. Es mejor si solo:
import datetime as dt
class Vacancy(object):
def __init__(self, date):
self.date = date
all_objects = [o1, o2, o3, o4, ...] #contains objects of type Vacancy
for o in all_objects:
earliestDate = dt.date(2020, 1, 1)
if o.date < earliestDate:
earliestDate = o.date
Y si desea asegurarse de que la variable miembro de fecha no se modifique, puede hacer algo como esto:
class Vacancy(object):
def __init__(self, date):
self.date = date
def getMinDate(self, other_date):
if self.date < other_date:
return dt.date(self.date)
else:
return other_date
all_objects = [o1, o2, o3, o4, ...] #contains objects of type Vacancy
earliestDate = dt.date(2020, 1, 1)
for o in all_objects:
earliestDate = o.getMinDate(earliestDate)
Sección de Reseñas y Valoraciones
Al final de todo puedes encontrar las críticas de otros gestores de proyectos, tú incluso puedes mostrar el tuyo si lo deseas.