我正在尝试创建一个与with
Python 中的关键字很好地配合的对象。我知道您必须创建__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
is also NoneType
。我究竟做错了什么?