Python初始类变量在每次调用后不断重置

Python初始类变量在每次调用后不断重置,python,class,Python,Class,下面我有一个示例类。每次调用calculate函数后,self.number会不断重置。我希望每次调用calculate函数时,self.number=self.number+1,每次调用self.number时,我都希望得到累积值。在下面的示例中,我期望最终结果为10,其中包含10个循环。现在,vaue self.number重置为0,并在每次通话中添加1 class ExampleClass(object): def __init__(self): self.numb

下面我有一个示例类。每次调用calculate函数后,self.number会不断重置。我希望每次调用calculate函数时,self.number=self.number+1,每次调用self.number时,我都希望得到累积值。在下面的示例中,我期望最终结果为10,其中包含10个循环。现在,vaue self.number重置为0,并在每次通话中添加1

class ExampleClass(object):
    def __init__(self):
        self.number = 0

    def calculate(self):
        self.number = self.number + 1
        return self.number


for i in range(10):
    classID = ExampleClass()
    print(classID.calculate())

您正在循环中创建该类的新实例。因此,在循环的每次迭代中,都会创建并使用一个全新的
ExampleClass
对象

要获得预期的行为,请将对象实例化移到循环之外

classID = ExampleClass()
for i in range(10):
    print(classID.calculate())

因为每次在for循环中调用
ExampleClass()
,self.number都会初始化为0

要实现您的期望,您应该尝试:

class ExampleClass(object):
    def __init__(self):
        self.number = 0

    def calculate(self):
        self.number = self.number + 1
        return self.number

classID = ExampleClass()
for i in range(10):
    print(classID.calculate())

想想你正在创建多少个
ExampleClass
e。类的每个实例都有自己的
self.number
。从循环中删除行
classID=ExampleClass()
,这就是通过每次创建一个新实例来重置你的值的原因。我一直不明白为什么新手经常犯这种错误。@Barmar可能误解了实例化对象的真正含义和类的用途,并且误解了数据与实例相关联,而不是与类本身相关联(至少在这样的情况下)。或者至少这是我从与有类似问题的人交谈中得到的。我所指的“类”错误更为普遍——在循环内而不是在循环前初始化累加器变量。比如,如果他们连接字符串,他们会将
s=“”
在循环内部。@Barmar你的评论在哪些方面有帮助?@HelloWorld123如果我能更好地理解新程序员认为我可以帮助他们更好的话。我问过很多人是什么导致他们写这样的东西的,他们认为我在侮辱他们。