Python范围/静态误解
发布时间:2020-12-16 23:44:35 所属栏目:Python 来源:网络整理
导读:我真的坚持为什么下面的代码块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: re
我真的坚持为什么下面的代码块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]" % ret arrayOfFruit = ['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,] 此代码的目标是迭代数组并将每个数据包装在父对象中.这是我的实际代码的减少,它将所有苹果添加到一袋苹果等等.我的猜测是,出于某种原因,它要么使用相同的对象,要么就像水果容器使用静态数组一样.我不知道如何解决这个问题. 解决方法
您的代码有一个默认参数来初始化类.默认参数的值在编译时计算一次,因此每个实例都使用相同的列表进行初始化.像这样改变它:
def __init__(self,arr=None): if arr is None: self.array = [] else: self.array = arr 我在这里更充分地讨论了这个问题:How to define a class in Python (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 描述符与类的装饰器
- python – PyCharm项目文件夹recs的ModuleNotFoundError错误
- python-day02
- 解决ImportError: libmysqlclient_r.so.16: cannot open sh
- python – Flask WTF’StringField’对象没有属性’transla
- python – sci-kit中的规范化学习linear_models
- 为什么Python argparse中的fromfile-prefix-chars不起作用?
- Python操作Mysql实例代码教程在线版(查询手册)
- python回调函数中使用多线程的方法
- python – cmd a在tkinter条目中不起作用