为何在with代码块中tempfile.TemporaryDirectory的类型会改变?
为什么x1是TemporaryDirectory类型,x2却是str类型?
先看你执行的代码:
>>> x1=tempfile.TemporaryDirectory() >>> print(type(x1)) <class 'tempfile.TemporaryDirectory'> >>> with tempfile.TemporaryDirectory() as x2: ... print(type(x2)) ... <class 'str'>
原因很简单,核心在于Python上下文管理器的工作机制和TemporaryDirectory类的实现:
- 直接赋值
x1=tempfile.TemporaryDirectory()时,x1就是TemporaryDirectory类的实例对象,所以类型是该类本身。 - 使用
with语句时,as后面的变量接收的是上下文管理器对象__enter__方法的返回值。而TemporaryDirectory的__enter__方法专门返回临时目录的路径字符串,因此x2的类型是字符串。
说白了,with语句不会直接把实例对象给你,而是给你实例__enter__方法返回的内容,这里刚好是路径字符串。
内容的提问来源于stack exchange,提问作者spraff
相关产品推荐
相关产品推荐

