首页 > 解决方案 > += 运算符在类变量上的行为与我预期的不同

问题描述

我有这个代码:

class Doh:
    ctr = 0;
    def __init__(self):
        self.my_num = self.ctr
        self.ctr += 1
d1 = Doh()
d2 = Doh()
print(f"d1: {d1.my_num}")
print(f"d2: {d2.my_num}")

我运行它期望 d1 和 d2 具有不同的值,self.my_num但它们都出来 0:

d1: 0
d2: 0

很明显,我不明白类变量如何与 += 一起使用。我究竟做错了什么?

标签: python

解决方案


这是一个可变性问题。如果你0用 a替换 your[]并开始附加它,你会得到你期望的结果。但是你不能改变一个数字,你只能用另一个替换它。尽管

self.my_num = self.ctr

实际上是否保存了对下一行self.my_num和的相同引用self.ctr

self.ctr += 1

self.ctr用新的(增加的)值替换s 引用。


推荐阅读