Python语句
发布时间:2020-12-20 13:06:03 所属栏目:Python 来源:网络整理
导读:我正在尝试 Python的语句,我发现在下面的代码清单中,我的__init__方法被调用两次,而我的__exit__方法被调用一次.这可能意味着如果此代码执行任何有用的操作,将会出现资源泄漏. class MyResource: def __enter__(self): print 'Entering MyResource' return M
我正在尝试
Python的语句,我发现在下面的代码清单中,我的__init__方法被调用两次,而我的__exit__方法被调用一次.这可能意味着如果此代码执行任何有用的操作,将会出现资源泄漏.
class MyResource: def __enter__(self): print 'Entering MyResource' return MyResource() def __exit__(self,exc_type,exc_value,traceback): print 'Cleaning up MyResource' def __init__(self): print 'Constructing MyResource' def some_function(self): print 'Some function' def main(): with MyResource() as r: r.some_function() if __name__=='__main__': main() 这是程序的输出: Constructing MyResource Entering MyResource Constructing MyResource Some function Cleaning up MyResource 我猜这是因为我在with语句中做错了,有效地手动调用了构造函数.我该如何纠正? 解决方法
您不应该从__enter__返回新实例.相反,返回self(正在调用__enter__的实例.这就是为什么__init __()被调用两次 – 你调用它两次,一次在你的with语句中,一次调用__enter __().这是一个正确的版本:
def __enter__(self): print 'Entering MyResource' return self (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |