Ich verwende Python 3.5.1 und den neu veröffentlichten MyPy v0.4.1 statischen Typ-Analysator.Warum verursacht das Definieren der Argumenttypen für __eq__ einen MyPy-Typfehler?
Ich habe etwas komplexeren Code, den ich habe auf diese möglichst einfache Python-Klasse reduziere nach unten erforderlich, um den Fehler zu reproduzieren:
class MyObject(object):
def __init__(self, value: int=5) -> None:
self.value = value
def __eq__(self, other: MyObject) -> bool:
return self.value == other.value
Ausführen des Typprüfers mypy test.py
die folgenden Fehler erzeugt:
test.py: note: In class "MyObject":
test.py:5: error: Argument 1 of "__eq__" incompatible with supertype "object"
Meine Theorie basierend auf these docs ist, dass __eq__
und __neq__
auf Objekt Typen bereits definiert haben, die mit der Neudefinition dieser Typen meiner Unterklasse kollidieren. Meine Frage ist, wie ich diese Typen definiere, um sicherzustellen, dass __eq__
mit meinem gewählten Typ typgeprüft ist.
Re: Bezug auf 'MyObject' im Inneren des eigenen Körpers, ich habe ohne Angabe in meinem Code, dass an anderer Stelle getan und ich bekomme keine Fehler von MyPy: https://github.com/pirate/py-data/blob/ master/recursive_descent_parser.py # L78 –
@NickSweeting: Hast du es ausgeführt? [Sie sollten eine Fehlermeldung erhalten, wenn Sie versuchen, es zu laufen.] (Http://ideone.com/vk5VX6) – user2357112
Ah, danke @ user2357112, ich mypy-ing es nur versucht, und vernachlässigt es eigentlich laufen. Es wurde in Strings umgewandelt. –