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

2024-04-25 20:46:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用属性初始化一个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作为CONSUMERPRODUCER)。。。但是我希望能够直接在输出中使用这些值(因此大写字母看起来很奇怪)。我不确定每个值(CONSUMER=1…)的等价数字是否对我有用。你知道吗

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


Tags: 方法用户self类型列表属性consumertype
1条回答
网友
1楼 · 发布于 2024-04-25 20:46:09

首先,你是怎么想用États-Unis来做一个变量的?列个单子?无论如何,枚举是一个很好的方法

要限制选项,请为传递的参数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'

相关问题 更多 >