python中enum枚举类用法详解
  TEZNKK3IfmPf 2023年11月13日 26 0

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)

运行结果:

python中enum枚举类用法详解

示例代码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)

运行结果:

python中enum枚举类用法详解

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

示例代码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)

运行结果:

python中enum枚举类用法详解

注意:如果要限制定义枚举时,不能定义相同值的成员。可以使用装饰器@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)

运行结果:

python中enum枚举类用法详解

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

示例代码5:

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

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

运行结果:

python中enum枚举类用法详解

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

示例代码6:

from enum import Enum

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

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

运行结果:

python中enum枚举类用法详解

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

示例代码7:

from enum import Enum

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

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

运行结果:

python中enum枚举类用法详解

补充:

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

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2024年05月31日   38   0   0 python开发语言
  TEZNKK3IfmPf   2024年05月31日   27   0   0 python
  TEZNKK3IfmPf   2024年05月31日   29   0   0 python
TEZNKK3IfmPf