【发布时间】:2021-08-22 16:00:41
【问题描述】:
我正在实现我的自定义open() 函数(我们称之为myOpen())。任务是,我希望能够通过 with 语句 (with myOpen(...) as myFile:) 使用此功能。据我所知,open() 必须返回文件对象(TextIO 或BinaryIO)。但是open() 在with 语句的上下文中不是函数,而是实现__enter__ 和__exit__ 的类。你有什么想法,如何将这两件事结合在一起?
谢谢!
【问题讨论】:
-
这篇文章解释了如何在 with 表达式中使用
__enter__和__exit__:stackoverflow.com/questions/1984325/… -
当你使用
with x() as y时,它实际上是在分配y = x().__enter__() -
@Peter 调用
with x() as y,其中x()是函数,正在给我AttributeError: __enter__(Python 3.9.5) -
啊,nvm,我重读了这个问题,答案是否定的,你不能将上下文管理器和函数结合起来,一次做两件事。但是,您可以做的是以在
__init__中完成逻辑并且只有def __enter__(self): return self的方式设计一个类。这样,无论是否使用with,您都可以获得相同的结果。
标签: python with-statement