python中enum枚举类用法详解

python在使用枚举类时需要导入enum模块,枚举定义用class关键字,继承Enum类。

定义枚举时,成员名称不允许重复,成员名称相同时就会报错。

示例代码1:

from enum import Enum
from types import DynamicClassAttribute


class BaseFunc(Enum):
    name = "dgw"
    age = 25
    sex = '男'

    # 父类Enum中的方法
    @DynamicClassAttribute
    def new_name(self):
        """The name of the Enum member."""
        return self._name_


data1 = list(map(lambda x: x.name, BaseFunc))
print(data1)
data2 = list(map(lambda x: x.new_name, BaseFunc))
print(data2)

运行结果:

示例代码2:

from enum import Enum


class BaseFunc(Enum):
    name = "dgw"
    age = 25
    sex = '男'


data_name = BaseFunc.name
data_age = BaseFunc.age

print(data_name)
print(data_age)

print(data_name.value)
print(data_age.value)
print(data_age.value == 25)
print(data_age.value is 25)

运行结果:

默认情况下,不同的成员值允许相同。但是两个相同值的成员,第二个成员的名称被视作第一个成员的别名

示例代码3:

from enum import Enum


class BaseFunc(Enum):
    name = "张三"
    names = "张三"
    age = 25
    sex = '男'


data_name = BaseFunc.name
data_names = BaseFunc.names

print(data_name)
print(data_names)

print(data_name.value)
print(data_names.value)

运行结果:

注意:如果要限制定义枚举时,不能定义相同值的成员。可以使用装饰器@unique【要导入unique模块】,遇到值相同时就会报错。

枚举取值:

示例代码4:

from enum import Enum


class BaseFunc(Enum):
    name = "张三"
    age = 25
    sex = '男'


# 通过成员,来获取它的名称和值
data_age1 = BaseFunc.age
# 通过成员的名称来获取成员
data_age2 = BaseFunc['age']
# 通过成员值来获取成员
data_age3 = BaseFunc(25)

print(data_age1)
print(data_age2)
print(data_age3)

print(data_age1.name)
print(data_age1.value)
print(data_age2.name)
print(data_age2.value)
print(data_age3.name)
print(data_age3.value)

运行结果:

枚举支持迭代器,可以遍历枚举成员

示例代码5:

from enum import Enum


class BaseFunc(Enum):
    name = "张三"
    age = 25
    sex = '男'


for value in BaseFunc:
    print(value, value.name, value.value)

运行结果:

如果枚举有值重复的成员,循环遍历枚举时只获取值重复成员的第一个成员

示例代码6:

from enum import Enum


class BaseFunc(Enum):
    name = "张三"
    names = "张三"
    age = 25
    sex = '男'


for value in BaseFunc:
    print(value, value.name, value.value)

运行结果:

如果想把值重复的成员也遍历出来,要用枚举的一个特殊属性__members__

示例代码7:

from enum import Enum


class BaseFunc(Enum):
    name = "张三"
    names = "张三"
    age = 25
    sex = '男'


for value in BaseFunc.__members__.items():
    print(value)

运行结果:

补充:

        枚举成员可进行同一性比较,使用is和not等,枚举成员可进等值比较,使用==,枚举成员不能进行大小比较。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值