Python типирование внутренних методов класса - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь использовать больше кода в своем коде, чтобы улучшить его читабельность и безопасность. В настоящее время я пытаюсь сделать это с помощью метода переопределения равенства:

class X:
    def __init__(self, t):
        self._t = t

    def __eq__(self, other: X):
        return self._t == other._t

Это кажется прямым, однако я получаю ошибку:

NameError: name 'X' is not defined.

Разрешает ли Python этот тип ссылки? Если так, как я могу это исправить?

1 Ответ

0 голосов
/ 30 сентября 2019

Можно аннотировать его следующим образом:

class X:
    def __init__(self, t):
        self._t = t

    def func(self, other: "X"):
        return self._t == other._t

Но, как сказал user2357112, если вы используете его в функции __eq__, mypy скажет вам:

a.py:5: error: Argument 1 of "__eq__" incompatible with supertype "object"
a.py:5: note: It is recommended for "__eq__" to work with arbitrary objects, for example:
a.py:5: note:     def __eq__(self, other: object) -> bool:
a.py:5: note:         if not isinstance(other, X):
a.py:5: note:             return NotImplemented
a.py:5: note:         return <logic to compare two X instances>
...