Saltar al contenido

Comparación de dos objetos de fecha en Python: TypeError: ‘

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 usaras o.getDate en vez de o.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 antes method significa que la fecha fue en el izquierda lado y el valor problemático estaba en el derecho lado. En tu caso, el earliestDate está sosteniendo un method en vez de una datetime.date.
  • Ahora que sabemos que earliestDate es el problema, donde se actualiza? earliestDate = date(2020, 1, 1) es claramente una cita, pero ¿qué tal earliestDate = o.getDate()? Está usando paréntesis, así que o.getDate() debe estar devolviendo un method.
  • Dado su código, el Vacancy siempre tendrá self.date establecido en una fecha, o se lanzará una excepción (algo como ValueError: 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 de Vacancy 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *