Sto usando Python 3.5.1 e il nuovo analizzatore di tipo statico v10.4.1 MyPy v0.4.1.Perché la definizione dei tipi di argomento per __eq__ genera un errore di tipo MyPy?
ho qualche codice più complesso che ho ridotto fino a questo semplice classe Python possibile necessario per riprodurre l'errore:
class MyObject(object):
def __init__(self, value: int=5) -> None:
self.value = value
def __eq__(self, other: MyObject) -> bool:
return self.value == other.value
Esecuzione del correttore tipo mypy test.py
produce il seguente errore:
test.py: note: In class "MyObject":
test.py:5: error: Argument 1 of "__eq__" incompatible with supertype "object"
La mia teoria basata su these docs è che __eq__
e __neq__
sull'oggetto hanno tipi già definiti, che si scontrano con la ridefinizione di questi tipi della mia sottoclasse. La mia domanda è come definire questi tipi per assicurarmi che l'opzione __eq__
sia controllata con il tipo scelto.
Re: riferendosi a 'MyObject' al suo interno il proprio corpo, l'ho già fatto altrove nel mio codice senza citare e ottengo nessun errore da MyPy: https://github.com/pirate/py-data/blob/ master/recursive_descent_parser.py # L78 –
@NickSweeting: l'hai eseguito? [Si dovrebbe ottenere un errore quando si tenta di eseguirlo.] (Http://ideone.com/vk5VX6) – user2357112
Ah, grazie @ user2357112, ho solo provato a mypy-it e ho dimenticato di eseguirlo. Il cambio su stringhe ha funzionato. –