我一直在尝试模拟任意长度的二进制寄存器,该二进制寄存器将像Python int
一样进行操作,但是会以固定长度进行初始化,并且具有特殊的上溢/下溢行为。 (即,您可以将其添加到其他int
中,并获得相同长度的Register
作为回报)
稍作阅读,似乎建议将int
子类化,而我一直在阅读this关于不可变类型子类化的知识。但我无法确定如何向其添加属性。
在我看来这应该可行,因为我只是在尝试添加静态行为。但是形式的代码:
def __new__(S, size, *args, **kwargs)
r = super(Register, S).__new__(S, 0)
r.maxVal = 2**size
return r
似乎是荒谬的,因为r
是不可变的。我什至不知道该将maxVal
放在哪里。它的确执行没有错误(尽管r = Register.__new__(Register, 16) ; print(r)
重载,但调用0
打印__repr__
),但是我仍然不知道我在这里做什么。
因此,我寻求帮助。这种行为可能吗?这种方法正确吗?预先感谢。