Python枚举类

本篇主要介绍Python中枚举类的用法,更多内容请参考:Python学习指南

当我们需要定义常量时,一个办法就是用大写变量通过整数来定义,例如月份:

JAN = 1
FEB = 2
MAR = 3
···
NOV = 11
DEC = 12

好处就是简单,确定是类型是int,并且仍然是变量。

更好的办法是为这样的枚举类型定义一个class类型,然后,每个常量都是class的一个唯一实例。Python提供了Enum来来实现这个功能:

from enum import Enum

Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))

这样我们就获得了Month类型的枚举值,可以直接使用Month.Jan来引用一个常量,或者枚举它的所有成员:

for name, member in Month.__members__.items():
    print(name, '=>', member, ',', member.value)

value属性则是自动赋给成员int常量,默认从1开始计数。

如果需要更精确地控制枚举类型,可以从Enum派生出自定义类:

@unique
class Weekday(Enum):
    Sun = 0
    Mon = 1
    Tue = 2
    Wed = 3
    Thu = 4
    Fri = 5
    Sat = 6

@unique装饰器可以帮助我们检查保证没有重复值

访问这些枚举类型可以有若干种方法:

>>> day1 = Weekday.Mon
>>> print(day1)
Weekday.Mon
>>> print(Weekday.Tue)
Weekday.Tue
>>> print(Weekday['Tue'].name)
Tue
>>> print(Weekday.Tue.value)
2
>>> print(day1 == Weekday.Mon)
True
>>> print(day1 == Weekday.Tue)
False
>>> print(Weekday(1))
Weekday.Mon
>>> print(day1 == Weekday(1))
True
>>> Weekday(7)
Traceback (most recent call last):
  ...
ValueError: 7 is not a valid Weekday
>>> for name, member in Weekday.__members__.items():
...     print(name, '=>', member)
...
Sun => Weekday.Sun
Mon => Weekday.Mon
Tue => Weekday.Tue
Wed => Weekday.Wed
Thu => Weekday.Thu
Fri => Weekday.Fri
Sat => Weekday.Sat

原文地址:https://www.cnblogs.com/miqi1992/p/8372091.html

时间: 2024-11-06 03:39:01

Python枚举类的相关文章

python,使用枚举类,面向对象高级编程

python #针对常量 #枚举类型定义一个class类型,然后,每个常量都是class的一个唯一实例. from enum import Enum Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')) #这样我们就获得了Month类型的枚举类 for name, member in Month.__members__.items():

Python -- OOP高级 -- 枚举类

Enum可以把一组相关常量定义在一个class中,且class不可变,而且成员可以直接比较. from enum import Enum Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')) for name, member in Month.__members__.items(): print("%s => %s, %d&quo

人生苦短之Python枚举类型enum

枚举类型enum是比较重要的一个数据类型,它是一种数据类型而不是数据结构,我们通常将一组常用的常数声明成枚举类型方便后续的使用.当一个变量有几种可能的取值的时候,我们将它定义为枚举类型.在Python中是如何实现的呢? 补充:很多初学者一下子不明白枚举是什么意思,比如我们有段程序很多地方需要用到12个月月份,可以将每个月份都定义出来使用: String Jan = "1月份",但是这样用起来很不好用,需要写12个,然后后续用的时候也不清晰明白,那么枚举类型就可以解决问题,它将这12个月

Python 枚举

1. 枚举的定义 首先,定义枚举要导入enum模块.枚举定义用class关键字,继承Enum类.用于定义枚举的class和定义类的class是有区别. 示例代码: from enum import Enum class Color(Enum): red = 1 orange = 2 yellow = 3 green = 4 blue = 5 indigo = 6 purple = 7 代码分析: 上面的代码,我们定义了颜色的枚举Color. 颜色枚举有7个成员,分别是Color.red.Colo

JavaSE复习_6 枚举类

△单例类是指只有一个实例,而枚举类实际上就是有有限个实例的类,在类里已经把实例定义好了. △枚举类的三种创建形式: 1) enum Week { MON,TUE,WED;//枚举类有默认构造函数创建的三个实例} } 2) enum Week { MON("星期一"), TUE( "星期二"),WED ("星期三" ); //具有参数的构造函数 private String name; Week(String name) { this. name=

[Python]剖析类的机理

Python是如何创建类的? 当python的解释器碰到类的定义的时候,它会像对待其他code一样先读取其内容,然后为这个class创建一个新的namespace并且执行其代码.类的定义通常包括变量,方法以及其他类.这些内容都在新的命名空间里面.从类的内容读到到类的对象的产生是通过内置type函数来实现,所以type函数也提供可动态创建类的可能. 用type函数动态创建类的时候,type这个构造函数需要三个参数,分别是类名,基类以及其属性. type实际上是一个元类,所谓的元类就是可以创建其他类

zend framework获取数据库中枚举类enum的数据并将其转换成数组

在model中建立这样的模型,在其中写入获取枚举类的方法 class Student extends Zend_Db_Table{ protected $_name ='student'; protected $_primary ='id'; function getPartyEnum($enumname){ //适配器并获取数据 $db = $this->getAdapter(); $db->query("SET NAMES GBK"); $sql = $db->q

枚举类

enum SeasonEnum //这是一个枚举类,有四个枚举值 { SPRING,SUMMER,FALL,WINTER; } public class EnumTest { public void judge(SeasonEnum s) { switch(s) { case SPRING: System.out.println("春天"); break; case SUMMER: System.out.println("夏天"); break; case FALL

包含抽象方法的枚举类

public enum Operation { PLUS,MINUS,TIMES,DIVIDE;//每一个枚举值都是一个实例 double eval(double x,double y)//我们定义一个方法,实现不同的操作 { switch(this) { case PLUS: return x + y; case MINUS: return x - y; case TIMES: return x * y; case DIVIDE: return x % y; default: return 0