Python范围静态误解

Python范围静态误解,第1张

概述我真的坚持为什么下面的代码块1导致输出1而不是输出2? 代码块1: class FruitContainer: def __init__(self,arr=[]): self.array = arr def addTo(self,something): self.array.append(something) d 我真的坚持为什么下面的代码块1导致输出1而不是输出2?

代码块1:

class FruitContainer:       def __init__(self,arr=[]):           self.array = arr       def addTo(self,something):           self.array.append(something)       def __str__(self):           ret = "["           for item in self.array:               ret = "%s%s," % (ret,item)           return "%s]" % retarrayOfFruit = ['apple','banana','pear']arrayOfFruitContainers = []while len(arrayOfFruit) > 0:   tempFruit = arrayOfFruit.pop(0)   tempB = FruitContainer()   tempB.addTo(tempFruit)   arrayOfFruitContainers.append(tempB)for container in arrayOfFruitContainers:   print container **Output 1 (actual):**[apple,banana,pear,][apple,]**Output 2 (desired):**[apple,][banana,][pear,]

此代码的目标是迭代数组并将每个数据包装在父对象中.这是我的实际代码的减少,它将所有苹果添加到一袋苹果等等.我的猜测是,出于某种原因,它要么使用相同的对象,要么就像水果容器使用静态数组一样.我不知道如何解决这个问题.

@H_404_9@解决方法 您的代码有一个默认参数来初始化类.默认参数的值在编译时计算一次,因此每个实例都使用相同的列表进行初始化.像这样改变它:
def __init__(self,arr=None):    if arr is None:        self.array = []    else:        self.array = arr

我在这里更充分地讨论了这个问题:How to define a class in Python

总结

以上是内存溢出为你收集整理的Python范围/静态误解全部内容,希望文章能够帮你解决Python范围/静态误解所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1207608.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存