>> i=42 >>> id(i) 10021708 >>> i.__iadd__(1) Tr-6ren">
gpt4 book ai didi

python - 如何为不可变类型实现 "__iadd__()"?

转载 作者:太空宇宙 更新时间:2023-11-03 12:15:25 25 4
gpt4 key购买 nike

我想子类化一个不可变类型或实现我自己的一个,其行为类似于 int,如以下控制台 session 所示:

>>> i=42
>>> id(i)
10021708
>>> i.__iadd__(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'int' object has no attribute '__iadd__'
>>> i += 1
>>> i
43
>>> id(i)
10021696

毫不奇怪,int 对象没有 __iadd__() 方法,但是将 += 应用于一个对象不会导致错误,相反,它显然创建了一个新的 int 并且还以某种神奇的方式将其重新分配给扩充赋值语句中给出的名称。

是否可以创建一个用户定义的类或内置不可变类的子类来执行此操作,如果可以,怎么做?

最佳答案

根本不实现__iadd__,而只实现__add__:

>>> class X(object):
... def __add__(self, o):
... return "added"
>>> x = X()
>>> x += 2
>>> x
'added'

如果没有x.__iadd__,Python 简单地将x += y 计算为x = x + y doc .

关于python - 如何为不可变类型实现 "__iadd__()"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11836570/

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