【问题标题】:Pythonic way of storing EnumsPythonic 存储枚举的方式
【发布时间】:2021-11-29 08:39:05
【问题描述】:

我有一个 Enum 类站。 (我正在使用 aenum,一个“扩展”python 枚举的库,并允许使用同时具有整数和字符串的枚举) 此类 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]

【问题讨论】:

  • 如果有效,您应该将其发布到Code Review。这个 SE 网站旨在提供对工作代码的广泛审查。
  • 为什么感觉不对?
  • @mkrieger1 : 创建多个只存储一个列表的类似乎有点过头了,但我没有什么经验,所以也许这很正常
  • 您为什么要创建这些类而不是仅仅定义“常量”列表RECENT_STATIONS = [Station.OURCQ, Station.LEDRU, Station.CHATELET] 等?
  • 因为我需要使用 station_nbs_list 之类的方法稍微处理一下这些列表

标签: python enums


【解决方案1】:

为您的列表使用多个类似乎很尴尬。为什么不只编写一个类并将特定列表作为其实例?这将使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])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-12
    • 2017-08-23
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多