加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读