zoukankan      html  css  js  c++  java
  • 上下文管理协议

    用到了两个系统内置函数__enter__ __exit__ 

    如果想象打开文件那样来操作类的实例化对象,则必须在类里面写入上面两个方法,事实上通过with……as的方式实例化出来对象的值是通过__enter__的返回值来赋值的,enten在对象实例化的那一步会被触发,而exit则会在with里面的流程结束时触发 实现代码如下:

     1 class Sto:
     2     def __init__(self,name):
     3         self.name = name
     4 
     5 
     6     def __enter__(self):
     7         print('enter被执行')
     8         return self
     9 
    10     def __exit__(self, exc_type, exc_val, exc_tb):
    11         print('exit被执行了')
    12 
    13     def eat(self):
    14         print('%s正在吃饭'%self.name)
    15 
    16     def sleep(self):
    17         print('%s正在睡觉'%self.name)
    18 
    19 with Sto('小芬') as s1:
    20    s1.sleep()
    21 s1.eat()
    22 print("***************************")
    23 print("***************************")
    24 print("***************************")

     执行代码块:

       在没有遇到异常的情况下,整个代码块执行完成之后,会触发exit,它的三个参数默认都为None

      一旦出现异常,异常位置直接触发exit

             如果将exit的返回值设置为True 则直接吞掉异常,继续向下执行

            若返回值不为True 则当场就报错了

            若exit运行完毕,则代表代码块已经完成执行

  • 相关阅读:
    一个MMORPG的常规技能系统
    as3.2版本中中jar生成方法
    lua中的weak table
    lua中使用table实现类和继承
    Javascript-设计模式_代理模式
    Javascript-设计模式_职责链模式
    Javascript-设计模式_策略模式
    前端安全第四期
    前端安全第三期
    前端安全第二期
  • 原文地址:https://www.cnblogs.com/wen-kang/p/9259101.html
Copyright © 2011-2022 走看看