最近我已經開始使用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