前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于PEP435的Enum和namedtuple及枚举实现

关于PEP435的Enum和namedtuple及枚举实现

作者头像
the5fire
发布2019-02-28 17:16:29
6320
发布2019-02-28 17:16:29
举报

关于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>_
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2013-05-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是枚举
  • 实现枚举的三种种方式
  • 1. namedtuple
  • 2. 自定义类
  • 3. 使用Enum
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档