gpt4 book ai didi

python - 向不可变类型子类添加属性

转载 作者:行者123 更新时间:2023-12-05 07:31:19 27 4
gpt4 key购买 nike

我一直在尝试模拟一个任意长度的二进制寄存器,它可以像 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__),但我仍然不知道我在这里做什么。

因此我寻求帮助。这种行为是可能的,可取的吗?这种方法正确吗?提前致谢。

最佳答案

相同的参数用于连接 __new__()__init__()。这样一来,就可以...

  • __new__() 中创建一个新实例,使用 super() 不带附加参数,并且
  • 根据附加参数在 __init__() 中添加一个属性。
    class Register(int):

def __new__(cls, size, *args, **kwargs):
return super().__new__(cls, *args, **kwargs)

def __init__(self, size, *args, **kwargs):
self.maxVal = 2**size

关于python - 向不可变类型子类添加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51895592/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com