Python: Enum枚举的实现

如果是新版Python用户(Python 3.4 with PEP 435):

1

2

from enum import Enum

Animal = Enum('Animal', 'ant bee cat dog')

 

or

1

2

3

4

5

class Animals(Enum):

    ant = 1

    bee = 2

    cat = 3

    dog = 4

 

旧版Python用户可以充分发挥动态语言的优越性来构造枚举,有简单的:

1

2

3

4

5

def enum(**enums):

    return type('Enum', (), enums)

 

Numbers = enum(ONE=1, TWO=2, THREE='three')

# Numbers.ONE == 1, Numbers.TWO == 2 and Numbers.THREE == 'three'

 

有复杂的:

1

2

3

4

5

6

def enum(*sequential, **named):

    enums = dict(zip(sequential, range(len(sequential))), **named)

    return type('Enum', (), enums)

 

Numbers = enum('ZERO', 'ONE', 'TWO')

# Numbers.ZERO == 0 and Numbers.ONE == 1

 

有带值到名称映射的:

1

2

3

4

5

6

7

def enum(*sequential, **named):

    enums = dict(zip(sequential, range(len(sequential))), **named)

    reverse = dict((value, key) for key, value in enums.iteritems())

    enums['reverse_mapping'] = reverse

    return type('Enum', (), enums)

 

# Numbers.reverse_mapping['three'] == 'THREE'

 

有用set实现的:

1

2

3

4

5

6

7

8

class Enum(set):

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值