iNy*_*yar 4 python initialization
我想初始化一个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]
Run Code Online (Sandbox Code Playgroud)
这可能是显而易见的,但我正式限制这组可能值的原因主要是为了避免/发现错误。
我已经查看了 Python上list和EnumPython中的各种解释(例如,如何在 Python 中实现枚举),但我不确定考虑到我的需求,这是否是正确的方法。特别是,从我读过的内容来看,似乎Enum是存储一个常量列表(User.typeasCONSUMER和PRODUCER)......但我希望能够直接在输出中使用这些值(所以大写看起来很奇怪)。而且我不确定每个值是否有等价的数字(CONSUMER=1 ...) 的对我有用。
编辑:我可能应该补充一点,我的应用程序中的实际值是法语,因此包括非 ASCII 字符(例如,États-Unis)。走这Enum条路似乎无法保留这些字符,并且意味着然后将值“转换”为“本地化”值,这在我看来对于一个简短的列表来说很麻烦。
首先,你是怎么想出一个变量的États-Unis?列个清单?无论如何,枚举是一个很好的方法,
要限制选择,请为传递的参数添加验证UserType并Country
其次,您可以直接比较枚举,例如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'
Run Code Online (Sandbox Code Playgroud)