python 枚举类型实现
来源:互联网 发布:手机记牌器软件 2016 编辑:程序博客网 时间:2024/05/01 06:48
从C系语言过来用Python,好不容易适应了写代码不打花括号,突然有一天发现它居然木有枚举……于是stackoverflow了一把,发现神人的枚举(enum)实现到处都是,于是汉化总结过来。
如果是新版Python用户(Python 3.4 with PEP 435):
1
2
from
enum
import
Enum
Animal
=
Enum(
'Animal'
,
'ant bee cat dog'
)
or
1
2
3
4
5
class
Animals(Enum):
ant
=
1
bee
=
2
cat
=
3
dog
=
4
旧版Python用户可以充分发挥动态语言的优越性来构造枚举,有简单的:
1
2
3
4
5
def
enum(
*
*
enums):
return
type
(
'Enum'
, (), enums)
Numbers
=
enum(ONE
=
1
, TWO
=
2
, THREE
=
'three'
)
# Numbers.ONE == 1, Numbers.TWO == 2 and Numbers.THREE == 'three'
有复杂的:
1
2
3
4
5
6
def
enum(
*
sequential,
*
*
named):
enums
=
dict
(
zip
(sequential,
range
(
len
(sequential))),
*
*
named)
return
type
(
'Enum'
, (), enums)
Numbers
=
enum(
'ZERO'
,
'ONE'
,
'TWO'
)
# Numbers.ZERO == 0 and Numbers.ONE == 1
有带值到名称映射的:
1
2
3
4
5
6
7
def
enum(
*
sequential,
*
*
named):
enums
=
dict
(
zip
(sequential,
range
(
len
(sequential))),
*
*
named)
reverse
=
dict
((value, key)
for
key, value
in
enums.iteritems())
enums[
'reverse_mapping'
]
=
reverse
return
type
(
'Enum'
, (), enums)
# Numbers.reverse_mapping['three'] == 'THREE'
有用set实现的:
1
2
3
4
5
6
7
8
class
Enum(
set
):
def
__getattr__(
self
, name):
if
name
in
self
:
return
name
raise
AttributeError
Animals
=
Enum([
"DOG"
,
"CAT"
,
"HORSE"
])
print
Animals.DOG
有用range实现的:
1
2
3
4
5
6
7
dog, cat, rabbit
=
range
(
3
)
# or
class
Stationary:
(Pen, Pencil, Eraser)
=
range
(
0
,
3
)
print
Stationary.Pen
有用tuple实现的:
1
2
3
4
class
Enum(
tuple
): __getattr__
=
tuple
.index
State
=
Enum([
'Unclaimed'
,
'Claimed'
])
print
State.Claimed
有用namedtuple实现的:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
from
collections
import
namedtuple
def
enum(
*
keys):
return
namedtuple(
'Enum'
, keys)(
*
keys)
MyEnum
=
enum(
'FOO'
,
'BAR'
,
'BAZ'
)
# 带字符数字映射的,像C/C++
def
enum(
*
keys):
return
namedtuple(
'Enum'
, keys)(
*
range
(
len
(keys)))
# 带字典映射的,可以映射出各种类型,不局限于数字
def
enum(
*
*
kwargs):
return
namedtuple(
'Enum'
, kwargs.keys())(
*
kwargs.values())
阅读全文
0 0
- python 枚举类型实现
- Python 的枚举类型 enum 实现
- Python 的枚举类型 enum 实现
- Python枚举类型
- Python 中的枚举类型
- 利用枚举类型实现统计
- Python--枚举类型和异常处理
- Python: Enum枚举的实现
- Python: Enum枚举的实现
- Java普通类实现枚举类型
- 实现IEnumerator接口的枚举器类型
- 使用普通类实现枚举类型
- 枚举类型的抽象方法定义实现
- java枚举类型的实现原理
- 单例--使用枚举类型实现
- 单元素枚举类型实现Singleton
- java枚举类型的实现原理
- 使用单枚举类型实现单例
- 算法引论
- dos命令之 tracert 使用详解
- 抽象数据类型——线性表
- 初识c#---继承和继承关系中的构造函数
- 我得GoLang学习之路——hello world
- python 枚举类型实现
- 【数据库SQL】SQL2008必要安装
- 1、let和const -ES6学习笔记
- php设计模式--单例,工厂,观察者,策略模式
- Oracle常用函数使用汇总
- ActiveForm 的下拉菜單 dropDownList
- 一文看懂web服务器、应用服务器、web容器、反向代理服务器区别与联系
- 关于《go程序设计语言》书中一个OS样例的坑(对于初学者来说)
- python列表与元组