17-02-2019, 10:34 AM
Hola de nuevo!
Echando un vistazo a la sobrecarga de operadores me surge una duda. Recientemente he instalado python 3.7 y no se tiene algo que ver con esta version. Por ejemplo, si sobrecargo un metodo magico relacional asi:
Me da como resultado:
Pero claro, yo los otros metodos relacionales en la clase no los he definido.
Incluso si dejo sin definir el metodo __le__ me da una excepcion. Por lo que aun me asaltan mas dudas de como opera todo esto:
Me salta la excepcion:
Cosa que veo normal al no definir el metodo __le__
Pero claro, tampoco he definido los otros metodos relacionales y en cambio python he realizado las operaciones de True y False.
La duda que tengo es si se deben definir todos los metodos de relacionales. Porque en el primer ejemplo que puse, con solo definir un par, no da ningun error.
Gracias!
Echando un vistazo a la sobrecarga de operadores me surge una duda. Recientemente he instalado python 3.7 y no se tiene algo que ver con esta version. Por ejemplo, si sobrecargo un metodo magico relacional asi:
Código:
class Animal:
def __init__(self, peso):
self.peso = peso
# Menor que...
def __lt__(self, other):
return self.peso < other.peso
# Menor o igual que...
def __le__(self, other):
return self.peso <= other.peso
elefante = Animal(1000)
leon = Animal(300)
print(elefante < leon)
print(elefante > leon)
print(elefante == leon)
print(elefante != leon)
print(elefante <= leon)
print(elefante >= leon)
Me da como resultado:
Código:
False
True
False
True
False
True
Incluso si dejo sin definir el metodo __le__ me da una excepcion. Por lo que aun me asaltan mas dudas de como opera todo esto:
Código:
class Animal:
def __init__(self, peso):
self.peso = peso
# Menor que...
def __lt__(self, other):
return self.peso < other.peso
'''
# Menor o igual que...
def __le__(self, other):
return self.peso <= other.peso
'''
elefante = Animal(1000)
leon = Animal(300)
print(elefante < leon)
print(elefante > leon)
print(elefante == leon)
print(elefante != leon)
print(elefante <= leon)
print(elefante >= leon)
Me salta la excepcion:
Código:
False
True
False
True
Traceback (most recent call last):
File "relacionales.py", line 27, in <module>
print(elefante <= leon)
TypeError: '<=' not supported between instances of 'Animal' and 'Animal'
Pero claro, tampoco he definido los otros metodos relacionales y en cambio python he realizado las operaciones de True y False.
La duda que tengo es si se deben definir todos los metodos de relacionales. Porque en el primer ejemplo que puse, con solo definir un par, no da ningun error.
Gracias!