Python类学习(九)——枚举类Enum

目录

1. 两种方式定义枚举类

1)直接使用Enum()函数列出多个枚举值来创建枚举类;

2)通过继承Enum类定义枚举类

2. 枚举类定义构造函数


什么是枚举类?

对象有限且固定的类;(比如季节类,只包括春夏秋冬四个对象)

1. 两种方式定义枚举类

1)直接使用Enum()函数列出多个枚举值来创建枚举类;

from enum import Enum
# 定义Season枚举类
Season = Enum('Season', ('SPRING', 'SUMMER', 'FALL', 'WINTER'))
# 第一个参数值为枚举类的类名,第二个参数值为一个元组,用于列出所有的枚举对象

定义的四个枚举对象都有name、value两个属性,name为该枚举对象的对象名,value代表该对象在枚举值中的序号(从1开始):

# 测试枚举对象两个属性的用法
print(Season.SPRING)        # Season.SPRING
print(Season.SUMMER.name)   # SUMMER
print(Season.FALL.value)    # 3

程序可以通过枚举对象名或者枚举对象序号值访问枚举对象:

print(Season['SPRING'])     # Season.SPRING
print(Season(2))            # Season.SUMMER  注意是括号

python还为枚举提供了一个__members__属性,该属性返回一个dict字典,字典包含所有的枚举对象:

print(Season.__members__)
# OrderedDict([('SPRING', <Season.SPRING: 1>), ('SUMMER', <Season.SUMMER: 2>), ('FALL', <Season.FALL: 3>), ('WINTER', <Season.WINTER: 4>)])

print(Season.__members__.items())
# odict_items([('SPRING', <Season.SPRING: 1>), ('SUMMER', <Season.SUMMER: 2>), ('FALL', <Season.FALL: 3>), ('WINTER', <Season.WINTER: 4>)])

为对象新建实例变量或者方法,枚举对象用“ 类名.对象名 ”表示

Season.SPRING.day = 31+28+31
print(Season.SPRING.day)        # 90

def inf():
    print("春天")    
Season.SPRING.des = inf
Season.SPRING.des()             # 春天

2)通过继承Enum类定义枚举类(可以定义自己的方法)

from enum import Enum
class Season(Enum):
    # 创建枚举对象并指定value值
    SPRING = "1"
    SUMMER = "2"
    FALL = "3"
    WINTER = "4"
    def inf(self):
        if self.value == '1':
            print("春天")
        elif self.value == '2':
            print("夏天")
        elif self.value == '3':
            print("秋天")
        else:
            print("冬天")
print(Season.SPRING)            # Season.SPRING
print(Season.SPRING.name)       # SPRING
print(Season.SPRING.value)      # 1   这个1是字符串类型
print(Season['SPRING'])         # Season.SPRING
Season.SPRING.inf()             # Season.SPRING

2. 枚举类定义构造函数

from enum import Enum
class Season(Enum):
    # 创建枚举对象并指定value值,超过一个值Python会自动将其封装成一个元组传给value
    SPRING = "1", "春天"
    SUMMER = "2", "夏天"
    FALL = "3", "秋天"
    WINTER = "4", "冬天"
    
    # 因为枚举类对象已经确定,所以构造函数不会用于创建新对象,其主要作用是映射对象的value值,
    # value值有几个元素,构造函数就有几个参数(不包括参数self)
    def __init__(self, num, ch_name):
        self.num = num
        self.ch_name = ch_name

# value值以元组形式输出
print(Season.SPRING.value)      # ('1', '春天')

# num、ch_name分别映射value元组的每个元素
print(Season.SPRING.num)
print(Season.SPRING.ch_name)

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值