Почему атрибут класса с именем `type` приводит к сбою `type[Foo]`?Python

Программы на Python
Ответить
Anonymous
 Почему атрибут класса с именем `type` приводит к сбою `type[Foo]`?

Сообщение Anonymous »

Когда я определяю атрибут класса с именем type, аннотация type[Foo] внутри того же класса приводит к тому, что mypy сообщает, что имя типа является переменной и, следовательно, «недопустимо как тип».

Код: Выделить всё

class Foo:
type: str
bar: type[Foo]
создает:

Код: Выделить всё

main.py:3: error: Variable "__main__.Foo.type" is not valid as a type  [valid-type]
Я ожидал, что type[Foo] будет ссылаться на встроенный тип, но mypy рассматривает type как атрибут класса, который я только что объявил.
Я нашел эти обходные пути:
  • Переименуйте атрибут (например, type_ или kind).
  • Вместо этого используйте старую типизацию.Type нового встроенного типа
Я нашел в PEP8 соглашение об именовании

Код: Выделить всё

single_trailing_underscore_
: используется по соглашению, чтобы избежать конфликтов с ключевым словом Python.

но тип не является ключевым словом.
Это соответствует семантике языка или это просто ограничение mypy?>

Подробнее здесь: https://stackoverflow.com/questions/798 ... pefoo-fail
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»