python - 如何检查位掩码是否包含位?
问题描述
我有以下位掩码
class FLAG(IntEnum):
DEFAULT = 0b0
和一个处理它们的类:
class Converter:
def has_flag(self, val):
return self._descriptor & val == val
我发现该has_flag
方法包含一个错误,因为每个其他标志都包含一个DEFAULT
标志。解决这个问题的最佳方法是什么?
flag
s 是互斥的。
我找到了以下解决方案:
def has_flag(self, val):
if val == FLAG.DEFAULT:
return self._descriptor == val
return self._descriptor & val == val
有没有其他方法可以修复该错误?
解决方案
由于 DEFAULT_ZERO 并不是真正的标志(它是没有标志),因此需要区别对待;你提出的方法是完全合理的。
请注意,您也不能设置 DEFAULT_ZERO 标志,因为它不是标志。
推荐阅读
- excel - 查找位于一个工作表上的各个组的工单数据,并根据组名称移动到另一个工作表
- javascript - 我怎样才能修改这个 JS 函数,以便它在字段等于一定长度时运行?
- python - PyCharm 终端无法识别 Python 或 Pip
- javascript - 如何禁用 eslint 中的单行注释?
- python - 将 python 2.7 脚本转换为 python 3.8
- graphql - 验证 graphql 查询
- android - Android Studio - Logcat 不适用于模拟器,但适用于手机
- objective-c - 如何从 Firestore 获取特定数据并在 Objective-C 中更新它
- r - 按关于 OID 的类拆分数据帧
- node.js - 使用 node.js 从 mongoDB 获取数据,连接有效,但没有数据显示