Аннотация типов в классе
Как аннотировать переменные объекта класса?
class Node:
def __init__(self, x: int) -> None:
self.__x = x #?
Ответы (1 шт):
Пример из PEP 526 – Syntax for Variable Annotations, раздел "Class and instance variable annotations"
class BasicStarship:
captain: str = 'Picard' # instance variable with default
damage: int # instance variable without default
stats: ClassVar[Dict[str, int]] = {} # class variable
Тут captain и damage - объявлены с аннотациями для атрибутов объекта (instance), третий вариант - с аннотацией для переменной класса. Правда, у captain значение по умолчанию делает этот атрибут переменной класса. Но в принципе инициализация объектами неизменяемых типов вполне допустима (первое переписваивание атрибута у объекта перекроет значение атрибута класса). С изменяемыми типами (например, списками) нужно быть осторожнее.
Таким образом, нужно объявить тип вашего поля на верхнем уровне класса:
class Node:
__x: int
def __init__(self, x: int) -> None:
self.__x = x
Если попытаться присвоить значение другого типа, при проверке с помощью mypy выведется ошибка:
class Node:
__x: int
def __init__(self, x: float) -> None:
self.__x = x
❯ mypy test.py
test.py:5: error: Incompatible types in assignment (expression has type "float", variable has type "int")
Found 1 error in 1 file (checked 1 source file)
PyCharm также подсветит проблему:
