我正在尝试使用 singledispatch 重载 Posicion 类中的这个函数并尝试遵循 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()
我尝试从 functools 库中应用 singledispatch,但遇到了与以下问题相同的错误:python3: singledispatch in class, how to dispatch self type。因为我正在尝试调度 self 类型。所以我尝试了
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)
但它总是输入,@__eq__.register(_Posicion)
如果我删除它总是输入 intdef __eq__(self, other):
对于这个问题的措辞可能不好,我再次道歉,并提前感谢您的帮助。如果还有其他需要补充的信息,请告诉我。