Как правильно аннотировать тип для operator.gt? - PullRequest
0 голосов
/ 10 мая 2019

У меня есть следующий фрагмент кода:

from typing import List
import operator


class A:

    def __init__(self, x: int) -> None:
        self.x = x

    def __gt__(self, other: "A") -> int:
        return 0 if self.x > other.x else -1


lst: List[A] = []
sorted(lst, key=operator.gt)

Теперь проблема в том, что mypy будет жаловаться на:

Аргумент "ключ" к "отсортирован""имеет несовместимый тип" Callable [[Any, Any], Any] ";Ожидается "Необязательно [Callable [[A], Любой]]"

Где я предполагаю, что operator.gt было явно аннотировано таким образом.

Мой вопрос, как можноЯ так комментирую, что также ясно, что lst является List[A], и что mypy не будет жаловаться на operator.gt?

1 Ответ

1 голос
/ 10 мая 2019

Это не имеет ничего общего с mypy и всем с сигнатурой key и operator.gt: оператор принимает два аргумента (две вещи для сравнения), тогда как key принимает один аргумент для преобразованияelements.

Другими словами: проблема не в A против Any, а скорее [foo] против [foo, foo].

Чего вы пытаетесь достичь с помощью этого ключафункционировать?

...