笔记-python-lib—data types-enum

1.      enum

Source code: Lib/enum.py

文档:https://docs.python.org/3/library/enum.html#using-auto

枚举类型enum是比较重要的一个数据类型,它是一种数据类型而不是数据结构,我们通常将一组常用的常数声明成枚举类型方便后续的使用。当一个变量有几种可能的取值的时候,我们将它定义为枚举类型。

1.1.    Module Contents

This module defines four enumeration classes that can be used to define unique sets of names and values: Enum, IntEnum, Flag, and IntFlag. It also defines one decorator, unique(), and one helper, auto.

class enum.Enum

Base class for creating enumerated constants. See section Functional API for an alternate construction syntax.

基础类的枚举类,最常用。

class enum.IntEnum

Base class for creating enumerated constants that are also subclasses of int.

class enum.IntFlag

Base class for creating enumerated constants that can be combined using the bitwise operators without losing their IntFlag membership. IntFlag members are also subclasses of int.

class enum.Flag

Base class for creating enumerated constants that can be combined using the bitwise operations without losing their Flag membership.

enum.unique()

Enum class decorator that ensures only one name is bound to any one value.

装饰器,用于保证枚举类中属性值的唯一性;

class enum.auto

Instances are replaced with an appropriate value for Enum members.

1.2.    基础使用

创建enum类

class Gender(Enum):
    a = 1
    b = 2
    c = 3
    d = 4
    e = 5

pr_type(Gender)

pr_type(Gender(1))
pr_type(Gender.b)

<enum 'Gender'> <class
'enum.EnumMeta'>

Gender.a <enum 'Gender'>

Gender.b <enum 'Gender'>

Gender就是一个类,它的类型是enum.EnumMeta

<enum 'Gender'>are enumeration
members (or enum members) and are functionally constants.是enum members,也叫功能常数

可以通过Gender.a或者Gender(1)或Gender[‘a’]引用属性

每个枚举类有两个属性:name,value,对应的是类变量中的属性名和值。

使用构造方法创建类:

from string import ascii_lowercase
ex1 = Enum('ex', (list(ascii_lowercase)))
pr_type(ex1)

print(ex1(3).__repr__())

结果:

<enum 'ex'> <class
'enum.EnumMeta'>

<ex.c: 3>

使用Enum()函数(就是Enum的构造方法)创建枚举类,该构造方法的第一个参数是枚举类的类名;第二个参数是一个元组,用于列出所有枚举值,也可以是可迭代对象;

本例中未给出枚举类的值,这时它会默认从1开始自增。

1.3.   
属性重复

枚举类的enum members不能重复

class S(Enum):
    sq = 2
    sw = 3
    sq = 4

s = S

报错:

TypeError: Attempted to reuse key: 'sq'

但值可以重复:

class S(Enum):
    sq = 2
    sw = 3
    #sq = 4
   
sr = 3

s = S

没有报错。

如果不允许值重复,enum有一个装饰器unique:

@enum.unique
class S(Enum):
    sq = 2
    sw = 3
    #sq = 4
   
sr = 3
s = S

这里产生抛出了一个异常:

ValueError: duplicate values found in
<enum 'S'>: sr -> sw

1.4.   
其它操作

案例对象:

class Shape(Enum):
    SQUARE = 2
    DIAMOND = 1
    CIRCLE = 3
    ALIAS_FOR_SQUARE = 2

1.4.1.  
iteration

>>> list(Shape)

[<Shape.SQUARE: 2>,
<Shape.DIAMOND: 1>, <Shape.CIRCLE: 3>]

The special attribute __members__ is
an ordered dictionary mapping names to members. It includes all names defined
in the enumeration, including the aliases:

>>>
for name, member in Shape.__members__.items():

...     name, member

1.4.2.  
planet

枚举类也可能自定义构造和生成方式,下面是一个简单的演示:

If __new__() or __init__() is
defined the value of the enum member will be passed to those methods:

>>>
class Planet(Enum):

...     MERCURY = (3.303e+23, 2.4397e6)

...     VENUS   = (4.869e+24, 6.0518e6)

...     EARTH   = (5.976e+24, 6.37814e6)

...     MARS    = (6.421e+23, 3.3972e6)

...     JUPITER = (1.9e+27,   7.1492e7)

...     SATURN  = (5.688e+26, 6.0268e7)

...     URANUS  = (8.686e+25, 2.5559e7)

...     NEPTUNE = (1.024e+26, 2.4746e7)

...     def __init__(self, mass, radius):

...         self.mass = mass       # in kilograms

...         self.radius = radius   # in meters

...     @property

...     def surface_gravity(self):

...         # universal gravitational constant  (m3 kg-1 s-2)

...         G = 6.67300E-11

...         return G * self.mass / (self.radius * self.radius)

...

>>>
Planet.EARTH.value

(5.976e+24,
6378140.0)

>>>
Planet.EARTH.surface_gravity

9.802652743337129

笔记-python-lib—data types-enum的更多相关文章

  1. Python - 2. Built-in Collection Data Types

    From: http://interactivepython.org/courselib/static/pythonds/Introduction/GettingStartedwithData.htm ...

  2. Python - 1. Built-in Atomic Data Types

    From:http://interactivepython.org/courselib/static/pythonds/Introduction/GettingStartedwithData.html ...

  3. 高性能MySQL笔记-第4章Optimizing Schema and Data Types

    1.Good schema design is pretty universal, but of course MySQL has special implementation details to ...

  4. ExtJS笔记 Ext.data.Types

    This is a static class containing the system-supplied data types which may be given to a Field. Type ...

  5. Data Types in the Kernel &lt;LDD3 学习笔记&gt;

    Data Types in the Kernel Use of Standard C Types /* * datasize.c -- print the size of common data it ...

  6. 数据分析---《Python for Data Analysis》学习笔记【04】

    <Python for Data Analysis>一书由Wes Mckinney所著,中文译名是<利用Python进行数据分析>.这里记录一下学习过程,其中有些方法和书中不同 ...

  7. 数据分析---《Python for Data Analysis》学习笔记【03】

    <Python for Data Analysis>一书由Wes Mckinney所著,中文译名是<利用Python进行数据分析>.这里记录一下学习过程,其中有些方法和书中不同 ...

  8. 数据分析---《Python for Data Analysis》学习笔记【02】

    <Python for Data Analysis>一书由Wes Mckinney所著,中文译名是<利用Python进行数据分析>.这里记录一下学习过程,其中有些方法和书中不同 ...

  9. 数据分析---《Python for Data Analysis》学习笔记【01】

    <Python for Data Analysis>一书由Wes Mckinney所著,中文译名是<利用Python进行数据分析>.这里记录一下学习过程,其中有些方法和书中不同 ...

  10. 学习笔记之Python for Data Analysis

    Python for Data Analysis, 2nd Edition https://www.safaribooksonline.com/library/view/python-for-data ...

随机推荐

  1. Git提交时提示“Please make sure you have the correct access rights and the repository exists.”的解决方法

    1.首先打开Git Bash设置名字和邮箱: git config --global user.name "你的名字" git config --global user.email ...

  2. go基础_函数

    函数的基本写法 func add(a int, b int) int { return a + b } 如果2个参数的类型一样,可以简写为 func add(a, b int) int { retur ...

  3. Linux shell tr 命令详解

    该随笔摘自 https://www.jb51.net/article/103892.htm Linux shell tr 命令详解 1. 用途 tr,translate的简写,主要用于压缩重复字符,删 ...

  4. Spring错误:org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.Bi

    在使用SSM框架传递多个参数的时候发生如下错误: 原因是因为在传递多个参数的时候没有使用注解@Param,所以才包如下错误: 参考的技术文章:https://blog.csdn.net/sinat_2 ...

  5. spark-shell中往mysql数据库写数据报错

    今天在看spark方面的知识的时候,在spark-shell中往mysql写数据时报错,错误信息如下: ERROR Executor: Exception in task 0.0 in stage 4 ...

  6. 让 typora和word一样好用

    让 typora和word一样好用  :https://github.com/itcastWsy/typora_copy_images typora是一款支持实时预览的markdown编辑器,作者在使 ...

  7. Numpy Pandas

    数据分析 : 是把隐藏在一些看似杂乱无章的数据背后的信息提炼出来,总结出所研究对象的内在规律. 数据分析三剑客 -  Numpy Pandas Matplotlib # Numpy 基于一维或多维的数 ...

  8. 页面弹窗toast和加载loading

    create-at 2019-04-04 都采用单例模式,原生js实现 兼容老版本浏览器内核,请将用es6语法的地方作修改 loading 加载 代码: 样式全部通过js创建style标签注入head ...

  9. [题解] 2019牛客暑期多校第三场H题 Magic Line

    题目链接:https://ac.nowcoder.com/acm/contest/883/H 题意:二维平面上有n个不同的点,构造一条直线把平面分成两个点数相同的部分. 题解:对这n个点以x为第一关键 ...

  10. Java JDBC 数据库链接小结随笔

    Java JDBC 数据库链接小结随笔 一.链接数据库的步骤 二.关于Statement  和  PrepareStatement 两者区别 用法 三.关于 ResultSet 的一些小结 四.自定义 ...