有人可以解释为什么以下代码的行为方式如下:
import types
class Dummy():
def __init__(self, name):
self.name = name
def __del__(self):
print "delete",self.name
d1 = Dummy("d1")
del d1
d1 = None
print "after d1"
d2 = Dummy("d2")
def func(self):
print "func called"
d2.func = types.MethodType(func, d2)
d2.func()
del d2
d2 = None
print "after d2"
d3 = Dummy("d3")
def func(self):
print "func called"
d3.func = types.MethodType(func, d3)
d3.func()
d3.func = None
del d3
d3 = None
print "after d3"
Run Code Online (Sandbox Code Playgroud)
输出(注意d2的析构函数从不被调用)是这个(python 2.7)
delete d1
after d1
func called
after …Run Code Online (Sandbox Code Playgroud) 如果我执行以下操作,文件句柄会在Python中超出范围时自动关闭:
def read_contents(file_path):
return file(file_path).read()
Run Code Online (Sandbox Code Playgroud)
如果没有,我该怎么写这个函数来自动关闭范围?
我有一个类,我在构造函数中创建一个文件对象.这个类还实现了finish()方法作为其接口的一部分,在这个方法中我关闭了文件对象.问题是,如果我在此之前得到异常,则不会关闭该文件.有问题的类有许多其他使用文件对象的方法.我是否需要在try finally子句中包含所有这些,还是有更好的方法?
谢谢,
巴里