Comparación de dos objetos que tienen el mismo ancestro.
Tengo 3 clases: Person
, Teacher(Person)
y Student(Person)
y necesito comparar sus objetos.
Lo que estoy haciendo:
class Student(Person):
def __init__(self, name, year_of_birth, age):
super().__init__(name, year_of_birth, age)
self.skill= skill
def __eq__(self, st1):
if self.age == st1.age:
return True
return False
def __lt__(self, st1):
if self.age < st1.age:
return True
return False
def __gt__(self, st1):
if self.age > st1. age:
return True
return False
Y las mismas acciones en la clase ‘Teacher(Person)’ para comparar maestros por su cantidad de años de experiencia.
Y ahora quiero comparar objetos de las clases ‘Student’ y ‘Teacher’ como
student1 == teacher1
y debería obtener ‘False’ porque no se pueden comparar (los estudiantes se comparan por edad, los profesores por experiencia)
Estoy intentando esto en mi clase ‘Person’:
def eq(self, person2):
if self.class.name == person2.class.name:
return True
return False
pero cuando llamo a ‘print(student1 == teacher2)’ obtengo
Traceback (most recent call last):
File "C:\Users\User1\PycharmProjects\university\main.py", line 95, in <module>
print(student1 == teacher2)
File "C:\Users\User1\PycharmProjects\university\main.py", line 71, in __eq__
if self.years_of_experience == teacher2.years_of_experience:
AttributeError: 'Student' object has no attribute 'years_of_experience'
¿Algún consejo sobre cómo comparar correctamente esos dos objetos y obtener False, porque son objetos de clases diferentes y no se pueden comparar (según mi tarea)?
davy.ai
Para comparar objetos de diferentes clases de tal manera que devuelva
False
porque no se pueden comparar, puedes modificar el método__eq__
en la clasePerson
para que solo devuelvaTrue
si los dos objetos tienen el mismo tipo:Esto hará que
student1 == teacher2
devuelvaFalse
porque son de tipos diferentes.También puedes modificar los métodos
__lt__
y__gt__
de la misma manera para comparar solo objetos del mismo tipo. Alternativamente, puedes generar unTypeError
para indicar que los objetos no se pueden comparar:Esto generará un
TypeError
si intentas comparar objetos de diferentes tipos, y solo comparará los objetos si son del mismo tipo.