标志最后一个变种呈这样一种情形, 它和某事物类似, 其成员能够借助按位运算符, |, ^~来予以组合, 然而与那事物有所差异的是, 它们不可以跟任何其他的该事物枚举或者另一事物进行组合或者比较。尽管能够直接去指定值, 不过推荐采用某事物作为值, 以此让该事物挑选适宜的值。假如是与那般的情况, 要是成员之中存在着某种特定的组合致使所有的旗标都没有被设置, 那么此时它的那个布尔值就会等于 :。 from enum import Flag, auto class Color(Flag): ... RED auto() ... BLUE auto() ... GREEN auto() ... Color.RED Color.GREEN bool(Color.RED Color.GREEN) False应当说, 单个旗标的数值, 是要为二的乘方的, 也就是像1、2 、4 、8 等等这样的, 然而旗标的组合呢, 却不存在这样的限制。 class Color(Flag): ... RED auto() ... BLUE auto() ... GREEN auto() ... WHITE RED | BLUE | GREEN ... Color.WHITE给no flags set 这个条件确定一个名称, 这并不会对其布尔值产生改变, :。 class Color(Flag): ... BLACK 0 ... RED auto() ... BLUE auto() ... GREEN auto() ... Color.BLACK bool(Color.BLACK) False注解多数新建代码, 极力推荐运用 和 , 缘由在于 和 冲破了枚举的一些语义约定像能够跟整数开展比较,进而致使此行为被传递到其他不相关的枚举。 和 的运用理应只在 和 无法应用的情形比如, 利用枚举替换整数常量之际, 又或是跟其他系统相互进行交互操作之时。