zoukankan      html  css  js  c++  java
  • python contextlib

    from contextlib import contextmanager
    
    #定义一个类其实这就是很普通的类,任何的类都可以替换这个类
    class Query(object):
        def __init__(self, name):
            self.name = name
    
        def query(self):
            print('Query info about %s'%self.name)
    #需要一个过程化的方法,如果说有需要销毁资源的地方,就写在yield之后。
    @contextmanager
    def create_query(name):
        print('Begin')
        q = Query(name)
        yield q
        print('End')
    #把这个当做资源来使用with
    with create_query('Bob') as q:
        q.query()

    我比较喜欢这种。__enter__()和__exit__()方法却有一个优势就是可以整合成为完全的面向对象的方式。而上面这种,似乎看起来只能是面向过程的

    class Query(object):
        def __init__(self, name):
            self.name = name
    
        def __enter__(self):
            print('Begin')
            return self
    
        def __exit__(self, exc_type,exc_value,traceback):
            if (exc_type):
                print('Error')
            else:
                print('End')
    
        def query(self):
            print('Query info about %s....' % self.name)
    
    with Query('Bob') as q:
        q.query()
  • 相关阅读:
    数据库设计三大范式
    导航下拉栏 简单方法
    原生js制作弹出框
    原生js和jquery实现图片轮播特效
    用js 做大图轮播方法(一)
    Apple 企业开发者账号申请记录
    libnids介
    n++ ++n
    空指针为什么能调用成员函数?
    c++单例
  • 原文地址:https://www.cnblogs.com/sunyuw/p/8390881.html
Copyright © 2011-2022 走看看