首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在“`with`”语句中使用“`self`”作为上下文

在“`with`”语句中使用“`self`”作为上下文
EN

Stack Overflow用户
提问于 2017-07-06 00:18:05
回答 4查看 647关注 0票数 1

我经常看到使用self管理上下文的代码。例如

代码语言:javascript
复制
with self:
    self.x = 4
    self.y = 6

这里发生了什么事?使用self作为上下文允许什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-07-06 00:21:06

使用with self:的代码表明,无论您使用什么类,都可以提供__enter____exit__方法。这些方法创建上下文。它们可以方便安装/拆卸在测试等。

票数 4
EN

Stack Overflow用户

发布于 2017-07-06 00:29:26

这里发生了什么事?使用自我作为上下文允许什么?

只要类实现了上下文管理器应该实现的必要的“钩子”,Python就允许像普通的上下文管理器一样使用它。这里有一段从文档中摘录来帮助清理这里的事情。

Python的with语句支持由上下文管理器定义的运行时上下文的概念。这是使用一对方法实现的,这些方法允许用户定义类来定义在语句体执行之前输入的运行时上下文,并在语句结束时退出:

  • contextmanager.__enter__()输入运行时上下文并返回此对象或与运行时上下文相关的其他对象。此方法返回的值被绑定到with语句的as子句中的标识符,该标识符使用此上下文管理器。..。
  • contextmanager.__exit__(exc_type, exc_val, exc_tb)退出运行时上下文并返回一个布尔标志,指示是否应该抑制发生的任何异常。如果在执行with语句的正文时发生异常,则参数包含异常类型、值和跟踪信息。否则,这三个论点都是零的。..。

如上所述,当您为类实现必要的__enter____exit__魔术方法时,Python允许您将其视为上下文管理器。

票数 4
EN

Stack Overflow用户

发布于 2017-07-06 00:21:47

如果self是一个上下文管理器(即有__enter____exit__方法),这将简单地调用该功能,就像在类之外的with块中使用实例一样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44937907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档