объект X с полем a типа str, и есть наследник X, Y который сужает тип поля a до Enum(str, Enum), то я правильно понимаю, что теперь нельзя передавать в F объект Y ?
Потому что с помощью Enum нельзя сузить str до набора значений типа str ?
у нас будет поведение различаться при F(X(a="a")) и F(Y(a="a")). Вообще есть впечатление, что тут правильно будет сделать свой сабкласс от str, и кидать ошибку, если его пытаются инициализировать со значением отличным от возможных вариантов.
а тут у тебя ошибка при создании Y, не в F дело
mypy для этого есть
ой, вот этого я вообще не учёл, что оно без него и не проверится никак, и тут реально нужно явно создавать EnumType и уже его передавать.
хотя нет, почему? Если я в конструкторе вместо ванильного присвооения строки сделать создание хоть Enum, хоть MyNarrowedStr, то должно создаться. Или это будет ошибка при наследовании?
Если это поле только на чтение, вероятно нет проблем. Если предполагается что его могут менять - будет нарушение
тогда добавим геттер сеттер ?
Обсуждают сегодня