所有基础文章修改完毕

This commit is contained in:
TwoWater
2019-10-14 17:57:06 +08:00
parent 95ad977818
commit d7a75dac9e
48 changed files with 387 additions and 145 deletions

View File

@@ -0,0 +1,52 @@
# 一、枚举类的使用 #
实际开发中,我们离不开定义常量,当我们需要定义常量时,其中一个办法是用大写变量通过整数来定义,例如月份:
```python
JAN = 1
FEB = 2
MAR = 3
...
NOV = 11
DEC = 12
```
当然这样做简单快捷,缺点是类型是 `int` ,并且仍然是变量。
那有没有什么好的方法呢?
这时候我们定义一个 class 类型,每个常量都是 class 里面唯一的实例。
正好 Python 提供了 Enum 类来实现这个功能如下:
```python
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
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(name, '---------', member, '----------', member.value)
# 直接引用一个常量
print('\n', Month.Jan)
```
输出的结果如下:
![](http://twowaterimage.oss-cn-beijing.aliyuncs.com/2019-10-14-Python3%20%E6%9E%9A%E4%B8%BE%E7%B1%BB%E5%9E%8B%E7%9A%84%E4%BD%BF%E7%94%A8.png)
我们使用 `Enum` 来定义了一个枚举类。
上面的代码,我们创建了一个有关月份的枚举类型 Month ,这里要注意的是构造参数,第一个参数 Month 表示的是该枚举类的类名,第二个 tuple 参数,表示的是枚举类的值;当然,枚举类通过 `__members__` 遍历它的所有成员的方法。
注意的一点是 `member.value` 是自动赋给成员的 `int` 类型的常量,默认是从 1 开始的。
**而且 Enum 的成员均为单例Singleton并且不可实例化不可更改**