当前位置: 首页 > 后端技术 > Python

使用PythonEnum的几个注意点

时间:2023-03-26 17:42:13 Python

Enum是一个类,所以可以使用基本的类操作,也就是我们可以添加自己的方法classMood(Enum):FUNKY=1HAPPY=3defdescribe(self):#self是这里的成员returnself.name,自己。valuedef__str__(self):return'mycustomstr!{0}'.format(self.value)@classmethoddeffavorite_mood(cls):#cls这里是枚举returncls.HAPPY>>>Mood.favorite_mood()>>>Mood.HAPPY.describe()('HAPPY',3)>>>str(Mood.FUNKY)'我的自定义str!1'枚举的每个类成员都会自动转换为当前类的实例fromenumimportEnumclassColor(Enum):RED=1GREEN=2BLUE=3>>>type(Color.RED)>>>isinstance(Color.GREEN,Color)True表示我们不能直接使用枚举成员作为它的值:>>>Color.RED==1False>>>Color.RED.value==1False枚举成员也有一个name属性,和它的变量名一样>>>Color.RED.name=="RED"True枚举类有一个大坑:当父类有成员时,不能定义子类。所以,对于上面的Color类,如果你还想定义一个子类,就会报错:>>>classMoreColor(Color):...PINK=17...Traceback(mostrecentcalllast):...TypeError:MoreColor:cannotextendenumeration'Color'但是父类没有枚举成员,可以只定义函数:classFoo(Enum):defsome_behavior(self):passclassBar(Foo):HAPPY=1SAD=2这显然大大限制了枚举类的扩展,一个不能访问成员的函数用处不大。