What i'm trying is to overload this function that is in Posicion class using singledispatch and trying to follow the OOP:
def __eq__(self, other):
if isinstance(other, Posicion):
return other.get_posicion() == self.get_posicion()
elif type(other) == tuple:
assert len(other) == 2, "La tupla pasada por parámetro debe constar de dos elementos"
self.verificar_formato(other[0], other[1])
return (other[0].upper(), other[1]) == self.get_posicion()
I tried to apply singledispatch from functools library but i ran into the same errors as this question: python3: singledispatch in class, how to dispatch self type. because i'm trying to dispatch the self type. So i tryied
class _Posicion:
def __init__(self, y, x):
pass
class Posicion(_Posicion):
def __init__(self, y, x):
super()
self.x = x
self.y = y.upper()
def get_posicion(self):
return self.y, self.x
@singledispatch
def __eq__(self, other):
raise NotImplementedError("Everything bad")
@__eq__.register(_Posicion)
def _(self, other):
return other.get_posicion() == self.get_posicion()
@__eq__.register(tuple)
def _(self, other):
assert len(other) == 2, "La tupla pasada por parametro debe constar de dos elementos"
self.verificar_formato(other[0], other[1])
return (other[0].upper(), other[1]) == self.get_posicion()
if __name__ == "__main__":
Posicion('a', 1) == ('a', 1)
But it always enter in the @__eq__.register(_Posicion)
and if i deleted it always enter int the def __eq__(self, other):
I apologize, again, for the possibly bad wording of this question and thanks in advance for the help. If there is any other information that I should add, please let me know.