Python中的枚举转换器
我有一个枚举类型(enum)
class Nationality:
Poland='PL'
Germany='DE'
France='FR'
...
Spain='ES'
我有两个方法的原型:
# I want somethink like in c#
def convert_country_code_to_country_name(country_code):
print Enum.Parse(typeof(Nationality),country_code)
#this a second solution ,but it has a lot of ifs
def convert_country_code_to_country_name(country_code):
if country_code=='DE':
print Nationality.Germany #btw how to print here 'Germany', instead 'DE'
这是我想要调用这个方法的方式:
convert_country_code_to_country_name('DE') # I want here to print 'Germany'
我该如何在Python中实现它呢?
6 个回答
4
Python 3.4 引入了一种新的数据类型叫做 Enum(枚举),这个功能很方便,适合你的需求:
class Nationality(enum.Enum):
Poland = 'PL'
Germany = 'DE'
France = 'FR'
Spain = 'ES'
如果你想通过名字来获取枚举成员,可以这样做:
--> Nationality['France']
<Nationality.France: 'FR'>
如果你想通过值来获取枚举成员,可以这样做:
--> Nationalatiy('FR')
<Nationality.France: 'FR'>
一旦你得到了枚举成员,你可以这样使用:
--> member = Nationality('FR')
--> member.name
'France'
--> member.value
'FR'
6
最好的办法是一开始就创建一个字典。你的枚举在Python中没有意义,显得复杂得多。看起来你是在试图写Java代码,但这和Python代码的风格完全相反。
1
我的方法大概是这样的(可能不是最完美的,但你能理解我的意思):
class Nationality:
Poland = 'PL'
Germany = 'DE'
France = 'FR'
def convertToCodeFromName(name):
return getattr(Nationality, name)
def convertToNameFromCode(code):
lookFor = None
for member in dir(Nationality):
if (getattr(Nationality, member) == code):
lookFor = member
break
return lookFor
print(Nationality.convertToCodeFromName("Poland"))
print(Nationality.convertToNameFromCode("PL"))
希望这对你有帮助。