关于python在3.4中出现一个新的枚举的类 Enum
,刚出来时也看了下PEP-435的描述,没有太过于注意。今天群里大家简要的讨论了下枚举这个东西。wrongway兄也抛出了自己的看法,同时也让我(们)知道了有namedtuple这样一个东西的存在。然后我又仔细看了下PEP-435内容。
wrongway兄的观点是“namedtuple比所谓的枚举要更为灵活,其实我个人是不觉得有必要加入枚举。” 不过我的观点刚好相反,我觉得在python中实现一个功能有很多中方法,但是最佳的方法只有一个,应该清晰明确的表达码者的意图。我觉得用Emun来实现枚举比用namedtuple要更清楚些。
什么是枚举
在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。这两种类型经常(但不总是)重叠。枚举是一个被命名的整型常数的集合,枚举在日常生活中很常见。-- from wikipedia
实现枚举的三种种方式
定义一个星期的枚举
1. namedtuple
.. code:: python
from collections import namedtuple
Weekday = namedtuple('Weekly', 'sun, mon, tue, wen, thu, fri, sat')._make(range(7))
2. 自定义类
.. code:: python
class Entity(object):
items = {}
def __init__(self, *args):
for name, value in args:
self.items[name] = value
def __setattr__(self, name, value):
print value
def __getattr__(self, key):
return self.items.get(key)
Weekday = Entity(
('sun', 0),
('mon', 1),
('tue', 2),
('web', 3),
('thu', 4),
('fri', 5),
('sat', 6),
)
print Weekday.sun
3. 使用Enum
这个只能是py3.4中才有的了
.. code:: python
from enum import Enum
class Weekday(Enum):
sun = 0
mon = 1
tue = 2
web = 3
thu = 4
fri = 5
sat = 6
经过上面的实现我觉得还是最后一个相对清晰。
你怎么看?
参考:
PEP435 <http://www.python.org/dev/peps/pep-0435/>
_collections.namedtuple <http://docs.python.org/2/library/collections.html#collections.namedtuple>
_
----EOF-----
微信公众号:Python程序员杂谈
微信公众号:Python程序员杂谈