Я заметил, что у меня есть следующие вопросы, на которые невозможно ответить при поиске в Интернете:
- Хороша ли практика/идея сделать члены перечисления вызываемыми?
(Обратите внимание, что я имею в виду члены, а не класс, эта идея хорошо документирована) - Если это хорошая идея, как сообщить об этом Pycharm (2025.3.3) что члены перечисления являются вызываемыми?
В моем проекте я понял, что переписываю много одного и того же кода, просто чтобы преобразовать член перечисления в класс, который, помимо прочего, содержит этот член перечисления. Чтобы сократить количество строк кода, я подумал, что было бы здорово, если бы сами члены перечисления могли вызываться для выполнения повторяющихся задач преобразования.
Вот минимизированный рабочий пример того, что я описал:
Код: Выделить всё
from enum import Enum
from dataclasses import dataclass
@dataclass(frozen=True)
class TTypeDef:
ttype: TokenType
content: str
class TokenType(Enum):
FOO = "FOO"
BAR = "BAR"
def __call__(self, content):
return TTypeDef(self, content)
assert TokenType.FOO("foo") == TTypeDef(TokenType.FOO, "foo")
Однако PyCharm(2025.3.3) выдаст предупреждение, поскольку str не вызывается в TokenType.FOO("foo"), поскольку он его не получает, что вместо строкового значения будет экземпляр перечисления.
Это подвело меня к некоторым интернет-исследованиям, как избавиться от предупреждения. Результатом исследования было следующее: до меня ни у кого не было такой проблемы.
Это открывает вопрос: хорошая ли это идея?
Подробнее здесь: https://stackoverflow.com/questions/799 ... -good-idea
Мобильная версия