python Class:面向对象高级编程 Enum(枚举)、@unique
admin
2023-07-23 21:02:02
0

注:python 3.x版本才能使用

枚举格式:

               from enum import Enum

               新类名 = Enum(变量统称名,(变量1,变量2....)) 

               Month = Enum('month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))


1.

seasons = ['Spring', 'Summer', 'Fall', 'Winter']
print (list(enumerate(seasons)))

运行结果:

[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]


2.

from enum import Enum

Month = Enum('month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))

for name, member in Month.__members__.items():
    print(name, '=>', member, ',', member.value)

运行结果:

Jan => month.Jan , 1
Feb => month.Feb , 2
Mar => month.Mar , 3
Apr => month.Apr , 4
May => month.May , 5
Jun => month.Jun , 6
Jul => month.Jul , 7
Aug => month.Aug , 8
Sep => month.Sep , 9
Oct => month.Oct , 10
Nov => month.Nov , 11
Dec => month.Dec , 12


3. 当Class中有重复值时,会返回第一个,其他忽略

from enum import Enum

class Weekday(Enum):
    monday = 1
    tusday = 1
    wensdday =3
    thursday =9
    friday =5
#print (Weekday(1))

for n in Weekday:
    print (n)

运行结果:

Weekday.monday
Weekday.wensdday
Weekday.thursday
Weekday.friday

手动打Enum值时,一不小心打错了怎么办,又得一个个找,真麻烦。所以,有人想,如果有个方法能够检查重复值就好了,于是:@unique就出来了

from enum import Enum, 
@unique
class Weekday(Enum):
    monday = 1
    tusday = 1
    wensdday =3
    thursday =9
    friday =5
print (Weekday(1))

运行结果:

Traceback (most recent call last):
  File "/usercode/file.py", line 7, in 
    class Weekday(Enum):
  File "/usr/lib/python3.4/enum.py", line 524, in unique
    (enumeration, alias_details))
  ValueError: duplicate values found in : tusday -> monday


4.有人也在想,我就是不改咋地!我能不能通过另一个方法把成员都打印出来?于是:__members__就出来了

from enum import Enum

class Weekday(Enum):
    monday = 1
    tusday = 1
    wensdday = 3
    thursday = 9
    friday = 5

for n,y in Weekday.__members__.items():
    print (n, '--', y, '--',  y.value)
    
f = Weekday.thursday
print (f.value)

运行结果:

monday -- Weekday.monday -- 1
tusday -- Weekday.tusday -- 1
wensdday -- Weekday.wensdday -- 3
thursday -- Weekday.thursday -- 9
friday -- Weekday.friday -- 5
9

5.枚举比较:不能比大小!!能比同值

from enum import Enum, unique

#@unique
class Weekday(Enum):
    monday = 1
    tusday = 1
    wensdday =3
    thursday =9
    friday =5

print (Weekday.monday == Weekday.wensdday)
print (Weekday.tusday is Weekday.friday )

print (Weekday.tusday > Weekday.friday )

运行结果:

False
False

Traceback (most recent call last):
  File "/usercode/file.py", line 16, in 
    print (Weekday.tusday > Weekday.friday )
TypeError: unorderable types: Weekday() > Weekday()



看到一个很好很好的Blog,这讲的内容,他的比廖某的还要简洁明了。很喜欢。我的怎么乱?我纯粹是做笔记,没想那么多,要改构造想多了反而浪费时间。

https://blog.csdn.net/xionghuixionghui/article/details/66476601

相关内容

热门资讯

鲁比奥:伊朗收费若成先例,将像... 据美国哥伦比亚广播公司(CBS)援引法新社报道,美国国务卿鲁比奥周四警告称,如果允许伊朗对通过霍尔木...
恐慌之下,有妈妈把纸尿裤塞进了... 6月22日下午两点,济南蝉声轰鸣。山东省第一医科大学附属省立医院门诊大厅里,人流如常。“我不回答。”...
凤凰连线在委华人:委内瑞拉首都... 在委内瑞拉连续强震之后,当地有大量房屋倒塌或受损,而首都加拉加斯的民众也都从建筑物中撤离,在户外避险...
1198.79亿元!宇通客车连... 6月24日,世界品牌实验室发布2026年《中国500最具价值品牌》榜单,宇通客车以1198.79亿元...
活力中国调研行|数据多跑路,居... 【大河财立方 记者 夏晨翔 洪昊旸 雄安新区报道】 儿童活动区里,家长正带着孩子嬉戏玩耍;图书馆里,...
公安部公布4起非法占用农用地典... 6月25日,公安部公布4起非法占用农用地典型案例,旨在依法严厉打击非法占用农用地犯罪,全力守护国家粮...
中关村发展集团原党委书记、董事... 2026年6月25日,北京市第一中级人民法院依法公开宣判中关村发展集团股份有限公司原党委书记、董事长...
大学生因电瓶燃爆,全身90%面... 6月25日,武汉大学生杜均浩被室友电瓶烧伤案刑事与民事部分已一审宣判。
商务部:中方不得不反制美方错误... 据凤凰卫视报道,针对中方将10家美实体纳入出口管制,并在政府采购中限制46家美企,中国商务部新闻发言...
美国画饼,欧盟走过场,立陶宛挑... 曾经冲在“反华”最前线的立陶宛,如今态度似乎发生变化。立陶宛外交部22日证实,叫停了与台湾当局的合作...