继承int的类中的按位运算

时间:2012-08-06 09:11:52

标签: python int bitwise-operators

我继承自int,因为我想为按位操作实现一个简单的接口。由于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__成员函数。所以我的问题是如何解决这个问题?。

编辑:

我不想简化二进制操作,我想操纵整数的位。 E.g。

a = Bitset(0)
a[0]
>>>0
a[0] = 1
a[0]
>>>1

但我不想重新实现每个整数操作,这仍然可以正常工作。如果我包装一个内部整数,我必须这样做。 E.g

a = Bitset(0)
a += 1

应该仍然有用。

2 个答案:

答案 0 :(得分:1)

已经有用于按位运算的简单接口(参见http://docs.python.org/reference/expressions.html#summary),例如:

4 >> 1
# 2

你没有__ior__和__iand__,但你确实有__and__和__or__。 但我怀疑你想要的实际上是__ror__和__rand__,它们实现了按位运算。整数确实有最后的魔术方法。关于魔术方法,请参阅:http://www.rafekettler.com/magicmethods.html#numeric

另请参阅:http://wiki.python.org/moin/BitwiseOperators

答案 1 :(得分:1)

int不是可订阅的,也不是不可变的,因此您无法编写有效的__setindex__()方法。似乎描述基本上是一个可变的位向量类,例如this one似乎是由Guido编写的。您可以使用提供的__int__()__long__()方法将其转换为整数值(尽管我认为您不再需要后者)。