gpt4 book ai didi

python - 如何在 Python 中从一组可能值定义属性?

转载 作者:行者123 更新时间:2023-12-01 03:09:09 25 4
gpt4 key购买 nike

我想用属性初始化一个 User 类,这些属性的值取自有限且不可变的可能值集(例如,用户类型、国家/地区的简短列表...)。在 Python 中执行此操作的最佳方法是什么?

class User(object):
def __init__(self, type, country):
self.type = type # Possible values: [Consumer, Producer]
self.country = country # Possible values: [UK, USA, Japan, France]

这可能是显而易见的,但我正式限制这组可能值的原因主要是为了避免/发现错误。

我已经查看了 Python 中 listEnum 的各种解释(例如 How to implement an Enum in Python ),但我不确定这是否是正确的方法考虑到我的需要。特别是,从我读到的内容来看,Enum 似乎是存储一个常量 列表(User.type 作为 CONSUMER PRODUCER)...但我希望能够直接在输出中使用这些值(所以大写字母看起来很奇怪)。我不确定每个值的等效数字 (CONSUMER=1...) 对我来说是否有很大用处。

编辑:我可能应该补充一点,我的应用程序中的实际值是法语,因此包含非 ASCII 字符(例如,États-Unis)。采用 Enum 方式似乎无法保留这些字符,并且意味着将值“翻译”为“本地化”值,在我看来,这对于一个简短的列表来说很麻烦.

最佳答案

首先,您是如何考虑从 États-Unis 中创建一个变量的?列一个 list ?无论如何,枚举都是一个好方法,

要限制选择,请为传递的参数添加验证UserTypeCountry

其次,您可以直接比较枚举,例如 COUNTRY.US == COUNTRY.UK #returns False 因此这些枚举的实际值并不重要。

如果您仍想检索该值,则可以从 Country.US.value 获取该值

class Country(Enum):
US = 'États-Unis'
UK = 'Royaume-Uni'


class UserType(Enum):
CONSUMER = 1
PRODUCER = 2


class User(object):
def __init__(self, type, country):
if not isinstance(type, UserType):
raise Exception
self.type = type # Possible values: [Consumer, Producer]

if not isinstance(country, Country):
raise Exception
self.country = country # Possible values: [UK, USA, Japan, France]




==> Country.UK == Country.US
==> False

==> print(Country.US.value)
==> 'États-Unis'

关于python - 如何在 Python 中从一组可能值定义属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43040628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com