开发者社区> 问答> 正文

python基于类的实现

python基于类的实现

展开
收起
montos 2020-04-16 21:43:44 550 0
1 条回答
写回答
取消 提交回答
  • 一个上下文管理器的类,最起码要定义__enter__和__exit__方法。 让我们来构造我们自己的开启文件的上下文管理器,并学习下基础知识。

    class File(object):
        def __init__(self, file_name, method):
            self.file_obj = open(file_name, method)
        def __enter__(self):
            return self.file_obj
        def __exit__(self, type, value, traceback):
            self.file_obj.close()
    

    通过定义__enter__和__exit__方法,我们可以在with语句里使用它。我们来试试:

    with File('demo.txt', 'w') as opened_file:
        opened_file.write('Hola!')
    

    我们的__exit__函数接受三个参数。这些参数对于每个上下文管理器类中的__exit__方法都是必须的。我们来谈谈在底层都发生了什么。

    1. with语句先暂存了File类的__exit__方法
    2. 然后它调用File类的__enter__方法
    3. __enter__方法打开文件并返回给with语句
    4. 打开的文件句柄被传递给opened_file参数
    5. 我们使用.write()来写文件
    6. with语句调用之前暂存的__exit__方法
    7. __exit__方法关闭了文件
    2020-04-16 21:44:28
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载