我继承自 int,因为我想为按位运算实现一个简单的接口(interface)。由于 int 的非可变性,我必须使用整数成员函数,如 int.__and__
, ... .
class Bitset(int)
...
def __setitem__(self, index, value):
if value:
self.__ior__(1 << int(index))
else:
self.__iand__(~(1 << int(index)))
在我的一个成员函数中,我想使用 |=
和 &=
函数,但是整数没有 __ior__
和 __iand__
成员函数。所以我的问题是如何解决这个问题?
编辑:
我不想简化二进制运算,我想操作整数的位。例如
a = Bitset(0)
a[0]
>>>0
a[0] = 1
a[0]
>>>1
但我不想重新实现每个整数运算,它应该仍然可以工作。如果我包装一个内部整数,我必须这样做。例如
a = Bitset(0)
a += 1
应该仍然有效。
最佳答案
int
不可订阅且不可变,因此您无法编写有效的 __setindex__()
方法。看起来描述的基本上是一个可变的位向量类,例如 this one这似乎是圭多写的。您可以使用提供的 __int__()
和 __long__()
方法将其转换为整数值(尽管我认为您不再需要后者)。
关于python - 继承int的类中的位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11825380/