缺少python选项/enum库

optenum的Python项目详细描述


optenum

travis 在这一点上,人们的关注度也会变得越来越高。在这一点上,人们的关注度也会越来越高。在这一点上,人们的关注度也会越来越高。在这一点上,人们的关注度也会越来越高,他们的关注度也会越来越高,他们的关注度也会越来越高,他们的关注度也会越来越高,他们的关注度也会越来越高。他们的关注度也会越来越高。他们的关注度也会越来越高。他们的关注度也会越来越高。他们的关注度也会越来越高,他们的关注度也会越来越高,他们的关注度也会越来越高,他们的关注度也会越来越高。6172个65"/ < < A >travistravistravis

缺少python选项/enum库,它支持枚举代码、名称、文本、偶数(代码、名称)元组列表等。

名称"opt enum"来自"option"+"枚举操作"。

Python2.7+Python3.0+兼容

安装

巨蟒3.x,2.7

pip install optenum

对于那些可能丢失的6模块:

pip install six optenum

快速启动

  1. 简单的枚举类型

    说我们定义了一个简单的枚举:

    fromoptenumimportOptionsclassFruit(Options):APPLE=1ORANGE=2BANANA=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. 复杂声明

    您可以在许多注释中声明选项(枚举)。

    fromoptenumimportOption,OptionsclassEnumCellPhone(Options):APPLE=1SAMSUNG=Option(2,name='SAMSUNG')HUAWEI=3,'Huawei cellphone'# tuple annotation. name = code, textclassDoorState(Options):OPEN='O','Door is opened'# tuple annotation. name = code, textCLOSED=('C','Door is closed')# tuple annotation, too.IN_OPENING='IO'IN_CLOSING='IC'_FLAG=False# underscore leading name is not an optionx=lambday:y# function/callable is not an option
  3. 运算符

    选项支持某些运算符。更多信息请参见operators.md

    >>> 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. 收藏

    选项提供一些用于访问选项及其字段的集合。 有关详细信息,请参阅下面的"选项集合"部分。

    >>> 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型号选择

     To be written
    

背景

通常我们需要定义一些枚举或选项。但看起来python缺少这个类。 有时我们使用类、元组或dict作为替换。但它们并不方便。

例如,我们可以将类定义为枚举。我们可以使用myoption.foo获取枚举值1

classMyOption(object):foo=1bar=2

但是我们怎么才能得到枚举名foo呢?我们怎样才能得到所有枚举的列表?元组的偶数列表[(1,'foo'),(2,'bar')](在django模型中有用)

尽管python 3.7附带了数据类。到目前为止,它对我来说就像一块语法糖,无法解决这些问题。

功能

  • 代码-按不同类型列出的枚举/选项-例如0、1、-1(或"new"、"running"、"stopped")
  • name-枚举/选项的名称-例如. '新的,运行的,停止的。支持点访问。
  • 文本-枚举/选项的含义或说明。支持I18N—例如"新建"、"运行"、"停止"(翻译为"新建"、"中科"、"中科")
  • list-检索代码、名称或文本的列表[0,1,-1]
  • dict-检索映射的dict。如果需要,甚至可以映射。
  • 元组列表-检索[(code,name),…]元组的列表。适用于django型号。
  • 运营商支持-例如fruit.apple==1fruit.banana>;fruit.apple
  • 分组-将一组枚举/选项分组。例如,in_progress_state=['starting','stopping'],但是'started'和'stopped'不属于它。
  • 通过代码访问名称文本
  • 按名称查找枚举/选项代码

指南/导师

选项的类型转换
pip install optenum
0

将动态构造一个选项实例。optenum将构造一个新的子类型 选项(?)根据选项值(code)初始化新实例对象。

例如,选项(code=1,name='apple',text='an apple')将构造一个类选项(int)int是您的代码类型。如果您的选项是字符串,例如选项('a','admin','administration user'), 一个选项(str)类将在内部构造。

内部选项(?)类派生自选项和(例如int)。也就是说你可以用 isinstance检查对象。例如,假设我们有apple=option(1,'apple','an apple')。然后 isinstance(apple,int)真。而且isinstance(apple,option)也是true。所以你可以用 您的选项作为它的值(code)在dict中作为键等。

pip install optenum
1

布尔值用于选项

pip install optenum
2

组和标记

参见本文档

选项的运算符

从v1.1.1开始,选项的行为与其值(代码)相同。因此它将支持其代码支持的所有运算符。

pip install optenum
3

选项的集合

选项可以作为订阅批注直接访问。例如选项['foo'] 等于option.foo

我们还可以从选项类中访问以下集合。

  • 选项。代码-代码列表

  • 选项.名称-名称列表

  • 选项。全部-选项列表

  • 选项.元组-元组列表(名称代码文本

  • 选项。项-指定{名称选项}映射

  • 选项。获取列表(*字段)-文件元组列表。*字段是选项字段的名称 例如代码,*(名称代码)或*(代码名称文本

  • 选项。获取映射。 键字段指定哪个选项字段是键,例如名称代码字段指定值元组,这些值元组组合了哪些选项字段,如(名称文本)或名称。 如果字段是tuple,则值为tuple。如果字段是单字段,则值为单字段。

    自v1以来已弃用1

    in操作员可以检查选项中是否有代码。例如,如果水果中含有水果,则为苹果选项.name将不起作用。例如,如果水果中的"苹果"将得到。 如果要在选项中检查name,请改用collection。 例如,如果"apple"在水果中。名称

配置

一些标志可用于对您的选项进行一些简单的配置。

  • \u ignore\u invalid\u name\uu-ignore invalid选项名称,以便您可以将自己的属性/函数添加到类中。

    下划线前导属性和任何函数都将被忽略,以便您可以添加自己的属性和 功能。以下示例是有效的定义。

    pip install optenum
    
    4

    但如果属性不是大写的(所有字符),它将被视为无效的选项并导致异常。

    pip install optenum
    
    5

    如果您希望此选项可用,请将"忽略无效名称"添加到您的类中,如下所示。异常将被忽略。 但值得注意的是,它仍然不是一个选项

    pip install optenum
    
    6
  • 按顺序

    pip install optenum
    
    7
< H1> FAQ

  • 为什么不使用namedtuple

namedtuple也是定义枚举/选项的好方法。但它没有足够的功能 您可能需要诸如集合运算符比较文本等等。

  • 为什么选项名只允许大写?

因为如果将"忽略无效名称"设置为"真",则可以定义其他"无"选项属性。 枚举通常用大写标识符定义。

贡献者

投稿人名单:

  • Samuel Chen-项目所有者和维护者。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JavaMaven没有识别junit测试   正则表达式替换Java中字符串中的所有“(“and”)”   文件移动到另一台计算机时出现java错误“实例化servlet类”   服务器上的java服务   Spring数据JPA上的java嵌套@Transactional注释行为   eclipse中的Java Tomcat项目   java在Tomcat上部署web应用程序   如何解决“java.lang.IllegalStateException:ArrayAdapter要求资源ID为TextView”错误?   java在条形码上方添加文本,并使用烧烤更改字体大小   java与php基准测试   java使用正则表达式提取特定模式   java扫描器。findInLine()大量泄漏内存   java HTTP:差异请求属性和POST参数   返回空指针的Java方法?   java验证密码不包含名称中的3个以上连续字符   Java中带泛型的静态多态性   java在Android中获得最后一个已知位置   java为什么Groovy的Map比Array更具可伸缩性?   编码如何在Java中生成八进制字符串?   java Hibernate:使用单例会话写入日志(无刷新)