如何为不可变类型实现“ __iadd __()”?
发布于 2021-01-29 14:09:57
我想继承不可变类型或实现自己的一种,其行为类似于int
以下控制台会话所示:
>>> 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
并且还以某种方式神奇地将其重新分配为扩充赋值语句中给出的名称。
是否可以创建一个内置的不可变类的用户定义类或子类,并且可以这样做?
关注者
0
被浏览
134
1 个回答