私はPython 3.5.1と新しくリリースされたMyPy v0.4.1静的型アナライザを使用しています。__eq__の引数型を定義するとMyPy型のエラーが発生するのはなぜですか?
test.py: note: In class "MyObject":
test.py:5: error: Argument 1 of "__eq__" incompatible with supertype "object"
:
mypy test.py
次のエラーが生成型チェッカー実行
class MyObject(object):
def __init__(self, value: int=5) -> None:
self.value = value
def __eq__(self, other: MyObject) -> bool:
return self.value == other.value
:
は、私はエラーを再現するために必要な、この最も簡単なPythonクラスにまで減少してきたいくつかのより複雑なコードを持っています
私の理論はthese docsに基づいています。オブジェクトの__eq__
と__neq__
にはすでに定義された型があり、これらはサブクラスのこれらの型の再定義と衝突します。私の質問は、__eq__
が私の選択したタイプでタイプチェックされていることを確認するためにこれらのタイプを定義する方法です。
Re:自分の体の中の「MyObject」を参照すると、引用符を使わずにコード内のどこかで行っています。私はMyPyからエラーを受け取りません:https://github.com/pirate/py-data/blob/ master/recursive_descent_parser.py#L78 –
@NickSweeting:あなたはそれを実行しましたか? [あなたがそれを実行しようとするとエラーが発生するはずです] – user2357112
ああ、thanks @ user2357112、私はそれを試してみて、実際にはそれを無視してしまいました。それを文字列に変更しました。 –