Python初始类变量在每次调用后不断重置
下面我有一个示例类。每次调用calculate函数后,self.number会不断重置。我希望每次调用calculate函数时,self.number=self.number+1,每次调用self.number时,我都希望得到累积值。在下面的示例中,我期望最终结果为10,其中包含10个循环。现在,vaue self.number重置为0,并在每次通话中添加1Python初始类变量在每次调用后不断重置,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
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如果我能更好地理解新程序员认为我可以帮助他们更好的话。我问过很多人是什么导致他们写这样的东西的,他们认为我在侮辱他们。