存储枚举的 Pythonic 方式

Pythonic way of storing Enums

我有一个枚举 class 站。 (我正在使用 aenum,一个“扩展”python 枚举的库,并允许使用同时具有整数和字符串的枚举) 这个 class Station) 存储常量,用数字和字符串表示。一切顺利。

现在,我想存储 Station 对象的常量列表。我正在做的事情有效但感觉不对。 (我是 python / 编程的新手。)有人对此有建议吗? 谢谢。

这是我的代码:

from typing import List
from aenum import Enum
from abc import ABC


class Station(Enum):
    _init_ = 'value string'

    BASTILLE = 3, 'Bastille'
    LEDRU = 1, 'Ledru Rollin'
    REPU = 10, 'République'
    CHATELET = 2, 'Châtelet les Halles'
    OURCQ = 5, 'Ourcq'
    
    def __str__(self):
        return self.string

    @property
    def nb(self):
        return self.value


class StationEnsemble(ABC):
    name :str
    stations : List[Station]

    @property
    def station_nbs_list(self):
        return [st.nb for st in self.stations]


class RecentStations(StationEnsemble):
    stations = [Station.OURCQ,Station.LEDRU,Station.CHATELET]

class EastStations(StationEnsemble):
    stations=[Station.BASTILLE,Station.OURCQ,Station.CHATELET]

为您的列表使用多个 classes 似乎很尴尬。为什么不只写一个 class 并使特定列表成为其实例?这将使 property 工作(因为它需要在实例上查找)也让您有机会填写您键入提示但从未初始化的 name 属性。

class StationEnsemble:
    def __init__(self, name: str, stations: List[Station]):
        self.name = name
        self.stations = stations

    @property
    def station_nbs_list(self):
        return [st.nb for st in self.stations]

RecentStations = StationsEnsemble("recent", [Station.OURCQ, Station.LEDRU, Station.CHATELET])
EastStations = StationsEnsemble("east", [Station.BASTILLE, Station.OURCQ, Station.CHATELET])