作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道基类 Enum
和 IntEnum
.两者都非常有帮助,但我错过了标志操作的功能。我不希望这两个类实现我想要的功能。
让我们构造一个例子:
class NetlistKind(IntEnum):
Unknown = 0
LatticeNetlist = 1
QuartusNetlist = 2
XSTNetlist = 4
CoreGenNetlist = 8
All = 15
如您所见,我已经在使用
IntEnum
获取此枚举的算术功能。最好有
@unique
之类的东西确保所有值都是 2 的幂。我可以通过根据我的需要 fork enum.unique 来做到这一点。 (我知道
All
是该规则的一个异常(exception)。)
filter = NetlistKind.LatticeNetlist | NetlistKind.QuartusNetlist
由于底层的 int 位操作是可能的,并且 filter 的内部值为 3。
x in y
添加了一个魔术函数:
@unique
class NetlistKind(IntEnum):
Unknown = 0
LatticeNetlist = 1
QuartusNetlist = 2
XSTNetlist = 4
CoreGenNetlist = 8
All = 15
def __contains__(self, item):
return (self.value & item.value) == item.value
使用示例:
....
def GetNetlists(self, filter=NetlistKind.All):
for entity in self._entities:
for nl in entity.GetNetlists():
if (nl.kind in filter):
yield nl
def GetXilinxNetlists(self):
return self.GetNetlists(NetlistKind.XSTNetlist | NetlistKind.CoreGenNetlist)
所以问题是:
__str__
中所有事件标志的列表最佳答案
Python 3.6 新增了 Flag
和 IntFlag
它支持通常的按位运算。作为奖励,按位运算的结果值仍然是原始标志类的成员,并且是单例 [1]。
aenum
库也有这个添加,并且可以使用回 Python 2.7。
[1] 3.6.0 中存在一个错误:如果伪标志成员是在线程中创建的,那么最终可能会出现重复;这在 3.6.1 中已修复(并且从未存在于 aenum
中)。
关于python-3.x - 是否有用于标志/位掩码操作的 Python 类/枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36829820/
我是一名优秀的程序员,十分优秀!