python中的枚举

版权声明:此博客内容为本人学习笔记,转载请标明出处!本人所有文章仅发布于CSDN! https://blog.csdn.net/weixin_40457797/article/details/83988174

在python中可以用枚举代表不同的类型。

#枚举在python中是一个类,所有的枚举类型都是Enum类子类#
#枚举是主要作用是打tab,枚举中的tab一般以大写字母出现#
from enum import Enum

class ComPany(Enum):
    SALESMAN = 1
    ADMINISTRATIVE = 2
    LOGISTICS = 3
    MANAGEMENT = 4

print(ComPany.SALESMAN)

#枚举能实现的,字典和普通类其实也能实现#
#但是字典、其他普通类的tab都可以被轻易修改#
from enum import Enum

class ComPany1(Enum):
    SALESMAN = 1
    ADMINISTRATIVE = 2
    LOGISTICS = 3
    MANAGEMENT = 4

a = {'SALESMAN':1,'ADMINISTRATIVE':2,'LOGISTICS':3,'MANAGEMENT':4}
a['SALESMAN']=2
print(a)

class ComPany():
    SALESMAN = 1
    ADMINISTRATIVE = 2
    LOGISTICS = 3
    MANAGEMENT = 4

ComPany.SALESMAN = 3
print(ComPany.SALESMAN)

ComPany1.SALESMAN = 3#这里会报错,所以枚举类不能被修改#
print(ComPany1.SALESMAN)

#枚举内不会出现相同的tab,但是字典和普通类中都可以出现相同tab#
from enum import Enum

a = {'SALESMAN':1,'SALESMAN':2,'LOGISTICS':3,'MANAGEMENT':4}
print(a)

class ComPany():
    SALESMAN = 1
    SALESMAN = 2
    LOGISTICS = 3
    MANAGEMENT = 4

class ComPany1(Enum):
    SALESMAN = 1
    SALESMAN = 2#这里会报错,所以枚举类不能出现相同tab#
    LOGISTICS = 3
    MANAGEMENT = 4

#读取枚举#
from enum import Enum

class ComPany1(Enum):
    SALESMAN = 1
    ADMINISTRATIVE = 2
    LOGISTICS = 3
    MANAGEMENT = 4

print(ComPany1.SALESMAN)#枚举类型#
print(type(ComPany1.SALESMAN))
print('~~~~~~~~~~~~~~~~~~')
print(ComPany1['SALESMAN'])#枚举类型#
print (type(ComPany1['SALESMAN']))
print('~~~~~~~~~~~~~~~~~~')
print (ComPany1.SALESMAN.value)#枚举值#
print (type(ComPany1.SALESMAN.value))
print('~~~~~~~~~~~~~~~~~~')
print (ComPany1.SALESMAN.name)#枚举tab#
print (type(ComPany1.SALESMAN.name))

#遍历枚举#
class ComPany1(Enum):
    SALESMAN = 1
    ADMINISTRATIVE = 2
    LOGISTICS = 3
    MANAGEMENT = 4

for a in ComPany1:
    print(a)

#枚举可以进行等值比较但仅限于枚举tab之间的比较,并且只能进行等值比较不能进行大小比较,也不能进行跨类比较。#
from enum import Enum

class ComPany1(Enum):
    SALESMAN = 1
    ADMINISTRATIVE = 1
    LOGISTICS = 3
    MANAGEMENT = 4

a = ComPany1.SALESMAN == ComPany1.ADMINISTRATIVE
print(a)

#在上面那个实例中ComPany1.SALESMAN与ComPany1.ADMINISTRATIVE的值一致,所以ComPany1.ADMINISTRATIVE可以看作是ComPany1.SALESMAN的别名#
#在打印第二个时,出现的会是第一个:#
from enum import Enum

class ComPany1(Enum):
    SALESMAN = 1
    ADMINISTRATIVE = 1
    LOGISTICS = 3
    MANAGEMENT = 4

print(ComPany1.ADMINISTRATIVE)

#并且在遍历时会出现ADMINISTRATIVE消失的情况,因为这时ADMINISTRATIVE已经成为别名了:#
from enum import Enum

class ComPany1(Enum):
    SALESMAN = 1
    ADMINISTRATIVE = 1
    LOGISTICS = 3
    MANAGEMENT = 4

for a in ComPany1:
    print(a)

#如果需要所有的tab,我们可以使用__members__下的items方法来遍历,或者直接使用__members__#
from enum import Enum

class ComPany1(Enum):
    SALESMAN = 1
    ADMINISTRATIVE = 1
    LOGISTICS = 3
    MANAGEMENT = 4

for a in ComPany1.__members__.items():
    print(a)


from enum import Enum

class ComPany1(Enum):
    SALESMAN = 1
    ADMINISTRATIVE = 1
    LOGISTICS = 3
    MANAGEMENT = 4

for a in ComPany1.__members__:
    print(a)

#我们有时候可能会遇到枚举值转换枚举tab的情况:#
from enum import Enum

class ComPany1(Enum):
    SALESMAN = 1
    ADMINISTRATIVE = 2
    LOGISTICS = 3
    MANAGEMENT = 4

print(ComPany1(1))

#除了Enum外还有IntEnum,Enum的枚举值可以是各种类型的数据,而IntEnum的枚举值则只能是数字#
from enum import IntEnum

class ComPany1(IntEnum):
    SALESMAN = 1
    ADMINISTRATIVE = 2
    LOGISTICS = 3
    MANAGEMENT = 4

#如果我们需要规定枚举值不能重复,则可以使用unique:#
from enum import IntEnum,unique

@unique
class ComPany1(IntEnum):
    SALESMAN = 1
    ADMINISTRATIVE = 2
    LOGISTICS = 3
    MANAGEMENT = 4
#如果我们将随便两个枚举值重复,则会报错#

#另外枚举的设计模式是单例模式,所以,一般不会进行实例化#

猜你喜欢

转载自blog.csdn.net/weixin_40457797/article/details/83988174