python - with context management

class Fool:

    def __init__(self, name):
        self.name = name

    def __enter__(self):
        print('from enter')
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        print('from exit')
        print(exc_type)
        print(exc_val)
        print(exc_tb)
        # return True


with Fool('a.txt') as f:
    print('====>')
print('sdf')

# with Fool触发enter方法,将如return的值给f,操作结束后在执行exit方法,最后在打印sdf


#**************************重点***********************************
# 1. with obj ---> 触发obj.__enter__(),拿到返回值
# 2. as f ---> f=返回值
# 3. with obj as f  等同于 f = obj.__enter__()
# 4. 执行代码块
# 一:没有异常的情况下,整个代码块运行完毕后去触发__exit__,它的三个参数都为None
# 二:有异常的情况下,从异常出现的位置直接触发__exit__
#     a: 如果__eixt__的返回值为True,代表吞掉了异常
#     b: 如果__exit__的返回值不为True,代表吐出了异常
#     c: exit的运行完毕就代表了整个with语句的执行完毕


# 可以在__exit__中定制自动释放资源的机制,应用于管理资源如文件,网络连接和锁的编程环境中

Guess you like

Origin www.cnblogs.com/863652104kai/p/11459032.html