当前位置:   article > 正文

python——使用枚举类enum/type动态创造类/元类metaclass_python枚举元素定义为类

python枚举元素定义为类

目录

 

枚举类enum

type()动态创造类

元类metaclass


枚举类enum

当我们需要定义常量时,一个办法是用大写变量通过整数来定义,例如月份:

  1. JAN = 1
  2. FEB = 2
  3. MAR = 3
  4. ...
  5. NOV = 11
  6. DEC = 12

好处是简单,缺点是类型是int,并且仍然是变量。

更好的方法是为这样的枚举类型定义一个class类型,然后,每个常量都是class的一个唯一实例。Python提供了Enum类来实现这个功能:

  1. from enum import Enum
  2. Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))
  1. for name, member in Month.__members__.items():
  2. print(name, '=>', member, ',', member.value)
  1. Jan => Month.Jan , 1
  2. Feb => Month.Feb , 2
  3. Mar => Month.Mar , 3
  4. Apr => Month.Apr , 4
  5. May => Month.May , 5
  6. Jun => Month.Jun , 6
  7. Jul => Month.Jul , 7
  8. Aug => Month.Aug , 8
  9. Sep => Month.Sep , 9
  10. Oct => Month.Oct , 10
  11. Nov => Month.Nov , 11
  12. Dec => Month.Dec , 12

value属性则是自动赋给成员的int常量,默认从1开始计数。

如果需要更精确地控制枚举类型,可以从Enum派生出自定义类:

  1. from enum import Enum, unique
  2. @unique
  3. class Weekday(Enum):
  4. Sun = 0 # Sunvalue被设定为0
  5. Mon = 1
  6. Tue = 2
  7. Wed = 3
  8. Thu = 4
  9. Fri = 5
  10. Sat = 6
  11. #调用枚举成员的 3 种方式
  12. >>>print(print(Weekday.Tue))
  13. Weekday.Tue
  14. >>>print(Weekday['Tue'])
  15. Weekday.Tue
  16. >>>print(Weekday(1))
  17. Weekday.Mon
  18. #调取枚举成员中的 valuename
  19. >>>print(Weekday.Mon.value)
  20. 1
  21. >>>print(Weekday.Mon.name)
  22. Mon
  23. #遍历枚举类中所有成员的2种方式
  24. >>> for name, member in Weekday.__members__.items():
  25. ... print(name, '=>', member)
  26. ...
  27. Sun => Weekday.Sun
  28. Mon => Weekday.Mon
  29. Tue => Weekday.Tue
  30. W
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/944184
推荐阅读
相关标签
  

闽ICP备14008679号