我经常看到使用self管理上下文的代码。例如
with self:
self.x = 4
self.y = 6这里发生了什么事?使用self作为上下文允许什么?
发布于 2017-07-06 00:21:06
使用with self:的代码表明,无论您使用什么类,都可以提供__enter__和__exit__方法。这些方法创建上下文。它们可以方便安装/拆卸在测试等。
发布于 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允许您将其视为上下文管理器。
发布于 2017-07-06 00:21:47
如果self是一个上下文管理器(即有__enter__和__exit__方法),这将简单地调用该功能,就像在类之外的with块中使用实例一样。
https://stackoverflow.com/questions/44937907
复制相似问题