Недавно я начал использовать python3 и обнаружил, что существует встроенный тип Enum
, и его можно использовать так, как он используется в Java, скажем, для создания однопользовательского режима. Я могу загрузить конфиг моей телеграммы бота, как это:Правовое использование перечислений в python
class Config(Enum):
DATA = 'data'
def __init__(self, dummy):
with open('./app/config/data.yml', 'r') as f:
self.__data = yaml.load(f)
def __getitem__(self, item):
"""
May be too expensive, but config should not be mutable
so it returns a defensive copy for mutable sequences.
:param item: requested item
:return: value of the item
"""
value = self.__data[item]
return deepcopy(self.__data[item]) if isinstance(value, (MutableMapping, MutableSequence)) else value
@property
def authorized_url(self):
return '{}/bot{}'.format(self['base_url'], self['token'])
@property
def updates_url(self):
return self.authorized_url + self['endpoints']['get_updates']
@property
def send_message_url(self):
return self.authorized_url + self['endpoints']['send_message']
Я предполагаю, что это уместно, как конфигурации является своим родом одноточечного, и я не должен беспокоиться о создании экземпляра. Он создается автоматически во время импорта модуля и инкапсулируется внутри класса. Поэтому я получаю все только из коробки, плюс я могу определить удобные методы для агрегирования значений.
Так что мне любопытно, можно ли использовать перечисления, подобные этому в python? Если нет, я хотел бы услышать, почему нет.
Не используйте префикс с двойным подчеркиванием; одно подчеркивание является конфиденциальным по соглашению. – Ryan
Одиночное подчеркивание должно указывать защищенный атрибут, в то время как двойное подчеркивание означает «частный». – Atomikin
Нет, двойное подчеркивание означает «Я пытаюсь применить Java к Python». Избегайте. Избегайте одиночных игр. – Ryan