python - 对于在 python 中使用 `with` 关键字的类,我可以让它 __repr__ (打印)本身吗?

标签 python with-statement

我正在尝试创建一个可以很好地与 Python 中的 with 关键字配合使用的对象。我知道您必须创建 __enter____exit__ 方法,但我不太确定如何操作该对象。作为一个具体示例,我编写了一个创建本地工作空间并在退出时清理的类:

import tempfile, os, shutil
class temp_workspace(object):

    def __enter__(self):
        self.local_dir = os.getcwd()
        self.temp_dir  = tempfile.mkdtemp()
        os.chdir(self.temp_dir)

    def __exit__(self, exc_type, exc_value, traceback):
        os.chdir(self.local_dir)
        shutil.rmtree(self.temp_dir)

    def __repr__(self):
        return self.temp_dir

这工作得很好,但是当我尝试打印本地目录名称时:

with temp_workspace() as T:
    print "Temp directory name is ", T

它显示为 None 并且 __repr__ 甚至没有被调用!这真的很令人困惑,因为 T 也是 NoneType。我做错了什么?

最佳答案

您没有按照 context manager protocol 的指定从 __enter__ 返回对象.将 return self 添加到 __enter__ 方法的末尾。

关于python - 对于在 python 中使用 `with` 关键字的类,我可以让它 __repr__ (打印)本身吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14432790/

相关文章:

python - 从 pandas 表中选取/过滤元素,其中数据位于列标题值之间

python - 如何使用多个工作表和不同工作表名称 pandas 将 dfs 导出到 Excel

python - 如何使用 "with"调用 tempfile.mkstemp() ? - 或者为什么它不返回带有 __exit__() 的 fd?

Python:使用 "with"打开压缩或解压缩文件

用于临时变量分配的 Python 上下文管理器

vba - 是否可以在With Rg中引用Rg

python - 子样本丰度数据框

python - 如何强制caffe读取所有训练数据?

python - 在不知道变量名称的情况下返回正则表达式变量

with-statement - 为什么 agda with-abstract 不删除一些子句?