autumn

理解枚举替代实现的缺陷

允我心安 提交于 2019-11-28 08:11:27
Python3.4以前并不提供枚举类型,于是人们利用Python的动态性这个特征,想出了枚举的各种替代实现方式。 使用类属性 class Seasons : Spring , Summer , Autumn , Winter = range ( 4 ) print ( Seasons . Summer ) # 1 借助函数 def enum ( * args , ** kwargs ) : return type ( "Enum" , ( object , ) , dict ( zip ( args , range ( len ( args ) ) ) , ** kwargs ) ) Seasons = enum ( "Spring" , "Summer" , "Autumn" , "Winter" ) print ( Seasons . Summer ) # 1 使用 collections.namedtuple from collections import namedtuple Seasons = namedtuple ( 'Seasons' , 'Spring Summer Autumn Winter' ) . _make ( range ( 4 ) ) print ( Seasons . Summer ) # 1 显然,这些替代实现有其不合理的地方。 允许枚举值重复