Photo by rawpixel on Unsplash

Optenum

Photo by rawpixel on Unsplash

Optenum

Optenum 一个缺失的 Python 枚举类型库。支持 定义枚举类型及其代码、名字、文本,并可以生成 基于【代码,名字】(或其他)的列表、字典或其他集合

名字 “Optenum” 来自于 ‘option(选项)’ + ‘enumeration(枚举)’

兼容 Python 2.7+Python 3.4+

在 GitHub 上查看

安装

Python 3.x, 2.7

pip install optenum

如果(可能)缺少 six 包:

pip install six optenum

快速开始

  1. 简单的枚举类型声明

    假设我们需要一个简单的枚举类型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'
       
    
  2. 更复杂的枚举类型声明

    您可以用不同的方式来声明枚举类型:

    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
    
  3. 运算符

    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
    
  4. 集合类型

    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'}
       
    
  5. Django 建模中需要的choices

     待写...
    
Avatar
陈伟
架构师, 开发者

我喜欢互联网,云计算,物联网,效率和工具以及一切和编程相关的。