Подкласс классов данных Python с подсказкой типа без переопределения значения по умолчанию ⇐ Python
-
Гость
Подкласс классов данных Python с подсказкой типа без переопределения значения по умолчанию
При использовании классов данных только по ключевым словам для определения полей базового класса, которые наследуются подклассами, как следует указывать тип полей в подклассах, чтобы обозначить, что поля имеют ограниченный набор допустимых значений без переназначения значения по умолчанию ?
Пример (для иллюстративных целей, а не из реальной жизни):
из классов данных импортировать класс данных из перечисления импортировать автоматически, StrEnum от ввода импортного литерала Направление класса (StrEnum): ВНИЗ = авто() ВЛЕВО = авто() ВВЕРХ = авто() ВПРАВО = авто() НЕИЗВЕСТНО = авто() @dataclass(kw_only=True) База классов: направление: Направление = Направление.НЕИЗВЕСТНО @dataclass(kw_only=True) класс Горизонтальный (База): направление: буквальное[Направление.ВЛЕВО, Направление.ВПРАВО, Направление.НЕИЗВЕСТНО] @dataclass(kw_only=True) класс Вертикальный (База): направление: Буквальное[Направление.ВНИЗ, Направление.ВВЕРХ, Направление.НЕИЗВЕСТНО] = Направление.НЕИЗВЕСТНО печать(Горизонтально()) печать (Вертикально ()) Я понимаю, что это всего лишь подсказка типа и не применяется во время выполнения.
Класс Horizontal может быть создан без ошибок (что удивительно — учитывая, что direction снова определено внутри этого подкласса без значения по умолчанию), но pylint сообщает следующее: «E1125: В вызове конструктора отсутствует обязательный аргумент ключевого слова «направление». Установка значения direction в Vertical отменяет точку по умолчанию в базовом классе.
При использовании классов данных только по ключевым словам для определения полей базового класса, которые наследуются подклассами, как следует указывать тип полей в подклассах, чтобы обозначить, что поля имеют ограниченный набор допустимых значений без переназначения значения по умолчанию ?
Пример (для иллюстративных целей, а не из реальной жизни):
из классов данных импортировать класс данных из перечисления импортировать автоматически, StrEnum от ввода импортного литерала Направление класса (StrEnum): ВНИЗ = авто() ВЛЕВО = авто() ВВЕРХ = авто() ВПРАВО = авто() НЕИЗВЕСТНО = авто() @dataclass(kw_only=True) База классов: направление: Направление = Направление.НЕИЗВЕСТНО @dataclass(kw_only=True) класс Горизонтальный (База): направление: буквальное[Направление.ВЛЕВО, Направление.ВПРАВО, Направление.НЕИЗВЕСТНО] @dataclass(kw_only=True) класс Вертикальный (База): направление: Буквальное[Направление.ВНИЗ, Направление.ВВЕРХ, Направление.НЕИЗВЕСТНО] = Направление.НЕИЗВЕСТНО печать(Горизонтально()) печать (Вертикально ()) Я понимаю, что это всего лишь подсказка типа и не применяется во время выполнения.
Класс Horizontal может быть создан без ошибок (что удивительно — учитывая, что direction снова определено внутри этого подкласса без значения по умолчанию), но pylint сообщает следующее: «E1125: В вызове конструктора отсутствует обязательный аргумент ключевого слова «направление». Установка значения direction в Vertical отменяет точку по умолчанию в базовом классе.