Optenum
一个缺失的 Python 枚举类型库。支持 定义枚举类型及其代码、名字、文本,并可以生成 基于【代码,名字】(或其他)的列表、字典或其他集合
名字 “Optenum” 来自于 ‘option(选项)’ + ‘enumeration(枚举)’
兼容 Python 2.7+
及 Python 3.4+
安装
Python 3.x, 2.7
pip install optenum
如果(可能)缺少 six
包:
pip install six optenum
快速开始
-
简单的枚举类型声明
假设我们需要一个简单的枚举类型
Fruit
(水果),可以声明如下:from optenum import Options class Fruit(Options): APPLE = 1 ORANGE = 2 BANANA = 3
在 Python 命令行中输入下面这些命令:
>>> from optenum import Option, Options >>> class Fruit(Options): ... APPLE = 1 ... ORANGE = 2 ... BANANA = 3 >>> >>> Fruit.APPLE <Option code=1 name=APPLE text=None> >>> print(Fruit.APPLE) 1 >>> Fruit.APPLE.code 1 >>> Fruit.APPLE.name 'APPLE' >>> Fruit.APPLE.text >>> print(Fruit.APPLE.text) None >>> Fruit.APPLE.get_text() 'apple'
-
更复杂的枚举类型声明
您可以用不同的方式来声明枚举类型:
from optenum import Option, Options class EnumCellPhone(Options): APPLE = 1 SAMSUNG = Option(2, name='SAMSUNG') # Option 对象方式 HUAWEI = 3, 'Huawei cellphone' # tuple 方式. 名称 = 代码, 文本 class DoorState(Options): OPEN = 'O', 'Door is opened' # tuple 方式. CLOSED = ('C', 'Door is closed') # 另一种 tuple 方式. 名称 = (代码, 文本) IN_OPENING = 'IO' IN_CLOSING = 'IC' _FLAG = False # 下划线开头的名字不是一个Option x = lambda y: y # 函数或者可调用的成员(如lambda)不是一个Option
-
运算符
Option
支持各种运算符,请查看文档 operators.md。可在 Python 命令行中尝试:
>>> class Favorite(Options): ... APPLE = 1 ... BANANA = 3, 'Banana hot' ... >>> >>> Fruit.APPLE == Favorite.APPLE True >>> Fruit.BANANA == Favorite.BANANA False >>> Fruit.APPLE + 1 == Fruit.ORANGE True >>> Fruit.BANANA >> 2 0 >>> Fruit.BANANA << 2 12 >>> Fruit.BANANA > Favorite.APPLE True
-
集合类型
Options
提供多种集合类型用于访问其枚举对象. 请查阅 GitHub 文档 Collections for Options。>>> Fruit.codes [1, 2, 3] >>> Fruit.names ['ORANGE', 'APPLE', 'BANANA'] >>> Fruit.all [<Option code=2 name=ORANGE text=None>, <Option code=1 name=APPLE text=None>, <Option code=3 name=BANANA text=None>] >>> Fruit.tuples [('ORANGE', 2, None), ('APPLE', 1, None), ('BANANA', 3, None)] >>> Favorite.items {'APPLE': <Option code=1 name=APPLE text=None>, 'BANANA': <Option code=3 name=BANANA text=Banana hot>} >>> Favorite.get_list('code','text') [(1, None), (3, 'Banana hot')] >>> Favorite.get_dict('name','text') {'APPLE': None, 'BANANA': 'Banana hot'}
-
Django 建模中需要的
choices
待写...