python--enum
# enum用于枚举,该模块下有一个Enum,我们定义的类要继承它
# 一旦继承,那么我们定义的key(仮),不能有重复值。
# 如果要保证value(仮)不重复,那就引入unique,给我们定义的类加上这个装饰器
from enum import Enum, unique
@unique
class Color(Enum):
red = 1
green = 2
blue = 3
yellow = 4
pink = 5
cyan = 6
# 通过名称获取成员,两种方式
print(Color["red"]) # Color.red
print(Color.red) # Color.red
# 通过值来获取成员
print(Color(2)) # Color.green
# 获取成员的名称和值
print(Color.red.name) # red
print(Color.red.value) # 1
# 也可以通过迭代获取成员
for color in Color:
print(color.name, color.value)
'''
red 1
green 2
blue 3
yellow 4
pink 5
cyan 6
'''
# 如果不加上unique,也就允许值相同会有什么情况
from enum import Enum
class Girls(Enum):
satori = 1
mashiro = 2
nagisa = 3
tomoyo = 4
kurisu = 5
sola = 1
# satori 和sola的值都是1
print(Girls(1)) # Girls.satori,会发现只打印了satori,也就是第一个。如果值相同,那么后者相当于是前者的别名。
# 遍历的话,会发现sola同样没有被打印出来
for girl in Girls:
print(girl)
'''
Girls.satori
Girls.satori
Girls.mashiro
Girls.nagisa
Girls.tomoyo
Girls.kurisu
'''
# 如果想获取所有的成员,哪怕值相同,该怎么做呢?
# 枚举属性内部有一个__members__属性,相当于一个字典
for girl in Girls.__members__.items():
print(girl)
'''
('satori', <Girls.satori: 1>)
('mashiro', <Girls.mashiro: 2>)
('nagisa', <Girls.nagisa: 3>)
('tomoyo', <Girls.tomoyo: 4>)
('kurisu', <Girls.kurisu: 5>)
('sola', <Girls.satori: 1>)
'''
# 会发现以一种更详细的方式打印了出来
# 并且每个元组的第二个元素是<enum 'Girls'>类型
# 不要被<>给忽悠了,其实就是我们用Girls.satori,Girls.mashiro ····获取得到的结果
for girl in Girls.__members__.items():
print(girl[1].name, girl[1].value)
'''
satori 1
mashiro 2
nagisa 3
tomoyo 4
kurisu 5
satori 1
'''
# 成员之间也可以进行比较,但只能用==,is等操作符,不支持大小比较
print(Girls.satori is Girls.mashiro) # False
print(Girls.satori == Girls.mashiro) # False
print(Girls.satori is Girls.sola) # True,因为两者值一样,后者是前者的别名,两个指针指向了同一个地方
print(Girls.satori is Girls.sola) # True
# 如果把1换成列表的话
class Girls(Enum):
satori = [1, 2]
mashiro = 2
nagisa = 3
tomoyo = 4
kurisu = 5
sola = [1, 2]
kurumi = [1, 2]
print(Girls.satori is Girls.sola) # True
print(Girls.satori is Girls.sola) # True
print(Girls.kurumi is Girls.sola) # True
# 会发现仍旧是True,尽管列表是可变类型,但如果值一样,会继续让sola的指针指向satori的指针所指向的内存
# 因为值一样,那么sola就看做是satori的引用
# 同理再加上一个kurumi是一样的结果
# 不用__members__的话,打印的仍然是第一个satori
python--enum的更多相关文章
- Python Enum 枚举 用法汇总
Python Enum 枚举 用法汇总 import os import sys if sys.version_info.major + sys.version_info.minor * 0.1 &l ...
- Python enum 枚举 判断 key(键) 或者 value(值)是否在枚举中
Python enum 枚举 判断 key(键) 或者 value(值)是否在枚举中 python 的基本用法请浏览:https://www.cnblogs.com/ibingshan/p/98564 ...
- python enum 枚举
http://www.cnblogs.com/codingmylife/archive/2013/05/31/3110656.html python 3.4+ from enum import Enu ...
- 【python】Python: Enum枚举的实现
从C#系语言过来用Python,好不容易适应了写代码不打花括号,突然有一天发现它居然木有枚举……于是stackoverflow了一把,发现神人的枚举(enum)实现到处都是,于是汉化总结过来. 如果是 ...
- 【转载】Python: Enum枚举的实现
转自:http://www.cnblogs.com/codingmylife/archive/2013/05/31/3110656.html 从C系语言过来用Python,好不容易适应了写代码不打 ...
- protobuf, python Enum
继承enum.Enum的python class,其实是一个, name-value的关系,可以直接className(value)得到一个类.比如 import enum class xx(enum ...
- Python中模拟enum枚举类型的5种方法分享
这篇文章主要介绍了Python中模拟enum枚举类型的5种方法分享,本文直接给出实现代码,需要的朋友可以参考下 以下几种方法来模拟enum:(感觉方法一简单实用) 复制代码代码如下: # way1 ...
- Python 的枚举 Enum
枚举是常用的功能,看看Python的枚举. from enum import Enum Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May' ...
- python 枚举Enum
常量是任何一门语言中都会使用的一种变量类型 如 要表示星期常量,我们可能会直接定义一组变量 JAN = 1 TWO = 2 ... 然后在返回给前端的时候,我们返回的就会是1,2,...这种魔法数字, ...
- Python 枚举 enum
Python 枚举 enum enum 标准模块在 3.4 版本才可以使用,3.3 以下版本需要独立安装:https://pypi.python.org/pypi/enum34#downloads,官 ...
随机推荐
- 大话CNN经典模型:VGGNet
2014年,牛津大学计算机视觉组(Visual Geometry Group)和Google DeepMind公司的研究员一起研发出了新的深度卷积神经网络:VGGNet,并取得了ILSVRC20 ...
- PHP.32-TP框架商城应用实例-后台8-商品相册-添加
商品相册[是商品的其他相片] 添加相册需求: 每张图片生成三张缩略图{50*50.350*350.650*650} 1.建表p39_goods_pic{id,pic,sm_pic,mid_pic,bi ...
- WPF点击不同界面上的按钮实现界面切换
原文:WPF点击不同界面上的按钮实现界面切换 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_29844879/article/details/ ...
- [Django]我的第一个网页,报错啦~(自己实现过程中遇到问题以及解决办法)
环境配置: python :2.7.13 django:1.10.5 OS:Win7(64位)& Centos7 问题描述 解决办法 global name 'render' is no ...
- 5 Post实现django表单
本节大纲 1.article-detail 评论页面的准备工作 (1)model层创建评论模型 class Comment(models.Model): """创建评论模 ...
- runloop的mode作用是什么?
用来控制一些特殊操作只能在指定模式下运行,一般可以通过指定操作的运行mode来控制执行时机,以提高用户体验 系统默认注册了5个Mode kCFRunLoopDefaultMode:App的默认Mode ...
- USACO Section1.5 Superprime Rib 解题报告
sprime解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...
- CV限制符--C++
C/C++提供多种声明变量和函数存储持续性.作用域和链接性的关键字,有些被称为存储说明符(store class specifier)或 cv 限定符(cv-qualifier),这里就一起学习一下c ...
- Asp.Net中Response.Cookies.Remove 无法删除COOKIE的问题解决方法
登陆功能经常需要使用Cookie来存储登陆信息,可是在开发过程中,经常发现cookie无法删除的问题.删除的代码无非就是找到Cookie并删除掉. 但是会发现 Response.Cookies.Rem ...
- SecureCRT自动登录跳板机/堡垒机并连接目标机器
公司登录目标服务器,需要先登录跳板机(堡垒机),然后再登录目标机器,一共需要4.5步. MAC或LINUX机器可以写.SH脚本,那WINDOWS有没有一键登陆的方法呢? 常用的SecureCRT工具就 ...