据我了解,上下文管理器的
编辑:抱歉,没有注意到文档。
编辑2:实际上,我感到困惑的原因是因为我在思考
__init__()
和__enter__()
方法各被调用一次,一个接一个地调用,中间没有机会执行其他代码。将它们分成两个方法的目的是什么,我应该在每个方法中放置什么内容?编辑:抱歉,没有注意到文档。
编辑2:实际上,我感到困惑的原因是因为我在思考
@contextmanager
装饰器。使用@contextmananger
创建的上下文管理器只能使用一次(生成器在第一次使用后就会耗尽),因此通常会在with
语句中写入构造函数调用;如果那是使用with
语句的唯一方法,我的问题就有意义了。当然,在现实中,上下文管理器比@contextmanager
可以创建的更普遍;特别是上下文管理器通常可以被重复使用。希望这次我理解得没错?