我是这样看别人的代码的:classSomeClass(ParentClass):def__init__(self,attribute_1,attribute_2):self.__dict__.update(locals())delself.self我能理解第一行——向ParentClass'属性字典添加新属性。但是delself.self是什么?我试着看看self.self是什么。这正是那个self。为什么要删除其__init__函数中的对象?当我退出__init__时,我发现该对象仍然存在,地址相同。selfOut[2]:self.selfOut[3]:self.self.selfO
我有一个打开文件进行写入的类。在我的析构函数中,我调用了关闭文件的函数:classMyClass:def__del__(self):self.close()defclose(self):ifself.__fileHandle__isnotNone:self.__fileHandle__.close()但是当我使用如下代码删除对象时:myobj=MyClass()myobj.open()delmyobj如果我尝试重新实例化该对象,我会得到一个值错误:ValueError:Thefile'filename'isalreadyopened.Pleasecloseitbeforereopeni
关闭。这个问题需要更多focused.它目前不接受答案。想改善这个问题吗?更新问题,使其仅关注一个问题editingthispost.7年前关闭。Improvethisquestiondel语句在删除属性等方面有许多实际用途(参见Whenisdelusefulinpython?和其他),但它也可用于解除局部变量的绑定(bind):deftest():x=...delx是否有任何实际用例?我想到了垃圾收集,但x=None应该有同样的效果。我也听说过“导入后清理”的原因,但是from...import...这样做更好。“Cleanercode”也弹出来了,但是看不懂del可以使代码更干净(
乍一看,Python的__del__特殊方法似乎提供了与C++中的析构函数相同的优势。但是根据Python文档(https://docs.python.org/3.4/reference/datamodel.html),不能保证您的对象的__del__方法会被调用!Itisnotguaranteedthat__del__()methodsarecalledforobjectsthatstillexistwhentheinterpreterexits.所以也就是说,方法没用!不是吗?可能会或可能不会被调用的Hook函数实际上并没有多大用处,因此__del__没有提供任何关于RAII的信息
这个问题在这里已经有了答案:Strangeresultwhenremovingitemfromalistwhileiteratingoverit(8个答案)关闭4个月前。我是Python的新手,正在尝试使用列表我在linux2上使用Python3.2.3(默认,2012年10月19日,20:13:42),[GCC4.6.3]这是我的示例代码>>>l=[1,2,3,4,5,6]>>>foriinl:...l.pop(0)...print(l)...我希望得到以下输出1[2,3,4,5,6]2[3,4,5,6]3[4,5,6]4[5,6]5[6]6[]相反,我得到了这个1[2,3,4,5,
我一直在思考如何用Python编写类。更具体地说,构造函数是如何实现的以及对象应该如何被销毁。我不想依赖CPython的引用计数来进行对象清理。这基本上告诉我应该使用with语句来管理我的对象生命周期,并且我需要一个显式的关闭/处置方法(如果对象也是上下文管理器,则可以从__exit__调用此方法)。classFoo(object):def__init__(self):passdefclose(self):pass现在,如果我的所有对象都以这种方式运行并且我的所有代码都使用with语句或显式调用close()(或dispose()),我不会我真的看不出有必要在__del__中放入任何代
考虑以下示例代码classA:def__init__(self,i):self.i=iprint("Initializingobject{}".format(self.i))def__del__(self):print("Deletingobject{}".format(self.i))foriin[1,2]:a=A(i)在循环中创建对象旨在确保在创建新的A对象之前调用A的析构函数。但显然发生了以下情况:Initializingobject1Initializingobject2Deletingobject1Deletingobject2为什么只有在新对象初始化后才调用对象1的析构函数
当我尝试在lambda中使用del将线程列表精简为仅运行的线程时,我注意到了一个问题:map(lambdax:del(x)ifnotx.isAlive()elsex,self.threads)请暂时忽略这没有任何作用,我只是在玩弄map、reduce和lambda。由于del(x)处的语法错误而失败。随着一些困惑,我认为问题是del()没有返回值。例如,这会失败并出现相同的错误:b=5x=del(b)然而,这不是:defrmThis(x):del(x)这意味着我正在使用此解决方法:map(lambdax:rmThis(x)ifnotx.isAlive()elsex,self.threa
在with语句中创建的变量的范围在withblock之外(引用:Variabledefinedwithwith-statementavailableoutsideofwith-block?)。但是当我运行以下代码时:classFoo:def__init__(self):print"__int__()called."def__del__(self):print"__del__()called."def__enter__(self):print"__enter__()called."return"returned_test_str"def__exit__(self,exc,value,tb
我读了anexampleinDavidBeazley'sPythonEssentialReference:classAccount(object):def__init__(self,name,balance):self.name=nameself.balance=balanceself.observers=set()def__del__(self):forobinself.observers:ob.close()delself.observersdefregister(self,observer):self.observers.add(observer)defunregister(se