python - 为什么当我在下面的代码中调用 del 函数时,对象没有被删除和重新实例化?
问题描述
为什么当我在下面的代码中调用 del 函数时,对象没有被删除和重新实例化?
class A:
def __init__(self, a={}):
if not ('1' in a):
a['1']=1
else:
a['1']+=1
print (a['1'])
def __del__(self):
del self.a
for i in range (5):
a=A()
输出:
1,2,3,4,5
预期输出:
1,1,1,1,1
解决方案
当您在类的初始化中使用可变项作为默认参数时,它将在同一范围内创建的所有实例之间共享。您需要在类实例的每个初始化中创建一个字典,例如
class A:
def __init__(self, a=None):
a = {} if not a else a
if not ('1' in a):
a['1']=1
else:
a['1']+=1
print (a['1'])
for i in range(5):
a=A()
输出
1
1
1
1
1
推荐阅读
- validation - 简单的 SharePoint 验证 - 我的公式有什么问题?
- python-2.7 - 如何将文件从本地磁盘上传到谷歌云存储桶?
- javascript - Vue-Test-Utils 的“mount”和“shallowMount”的区别?
- bash - 在while循环中从函数分配变量值
- css - 在 div 的边框周围添加边框间距
- ios - 带有过滤器和查询的 Algolia 即时搜索
- robotframework - 使用python函数打开浏览器后如何保持浏览器打开 在RobotFramework中打开浏览器
- html - 如何查找对象xpath的数据
- delphi - TLS 版本的 Indy 奇怪/奇怪行为
- flowtype - 重用流型类声明