您当前的位置: 首页 >  Python

IT之一小佬

暂无认证

  • 3浏览

    0关注

    1192博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

python中enum枚举类用法详解

IT之一小佬 发布时间:2022-08-17 00:04:59 ,浏览量:3

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等,枚举成员可进等值比较,使用==,枚举成员不能进行大小比较。

关注
打赏
1665675218
查看更多评论
立即登录/注册

微信扫码登录

0.0665s