python上下文管理器协议的实现

 更新时间:2022年06月23日 16:02:58   作者:henry_rhy  
这篇文章主要介绍了python上下文管理器协议的实现,在python中所有实现了上下文管理器协议的对象 都可以用使用with操作,with启动了对象的上下文管理器

前言

在上下文管理器协议的过程中,涉及到两个魔术方法__enter__方法 和 __exit__方法

  • 在python中所有实现了上下文管理器协议的对象 都可以用使用with操作
  • with启动了对象的上下文管理器

上下文管理器协议:

  • __enter__方法: 进入enter方法返回的结果被as后面的变量接收
  • exit: 退出with中所有的语句执行完毕执行 执行 exit

实现一个简单的文件操作来看下上下文管理器协议:

class MyOpen:
    # 实例化
    def __init__(self, filename, mode, encoding):
        self.filename = filename
        self.mode = mode
        self.encoding = encoding

    def __enter__(self):
        print("---enter---方法")
        # 执行文件打开操作
        self.f = open(self.filename, self.mode, encoding=self.encoding)
        return self.f

    def __exit__(self, exc_type, exc_val, exc_tb):
        """
        :param exc_type: 异常类型
        :param exc_val: 异常信息
        :param exc_tb: 异常溯源对象
        :return:
        """
        print('----enter---')
        self.f.close()
with MyOpen('hr.txt', 'w', encoding='utf-8') as f:
    print(f.write('当前打开了文件,写入了数据:23323232'))

用pymysql实现一个操作数据库的类,实现上下文管理器协议,实现退出上下文时,自动关闭游标,断开连接

todo:版本1

# todo:版本1:
class mysql_db(object):
    #实例化属性
    def __init__(self):

1.连接数据库

        self.cou = pymysql.connect(
            host= "数据库主机地址",  
            port= 端口,  
            user="登录数据库的账号",  
            password="登录数据库的密码", 
            database="数据库名称",  
            charset='utf8',     编码格式
            cursorclass=pymysql.cursors.DictCursor     将默认的元组格式转换成字典格式输出
        )  

2.创建游标

        self.cur = self.cou.cursor()
    def __enter__(self):
        return self.cur       返回cur对象
    def __exit__(self, exc_type, exc_val, exc_tb):
        """
        :param exc_type: 异常类型
        :param exc_val: 异常信息
        :param exc_tb: 异常溯源对象
        :return:
        """
        #关闭游标
        self.cur.close()
       # 关闭数据库连接
        self.cou.close()
def Obtain_one_date():
    with mysql_db() as db:
        db.execute('select * from t_customer LIMIT 4')     使用execute方法进行查询语句
        content = db.fetchone()  返回一条数据的查询的结果
        print(content)

# 函数调用
Obtain_one_date()

todo:版本2

sql = 'select * from t_customer LIMIT 4'
def mysql_db1(**kwargs):
    return pymysql.connect(host=kwargs.get('host', 'xxxx'),
                           user=kwargs.get("user",'xxxx'),
                           passwd=kwargs.get("passwd",'xxxx'),
                           database=kwargs.get("database",'xxxx'),
                           port=kwargs.get('port', xxxx),
                           charset=kwargs.get('charset', 'utf8'))

1.创建数据库连接对象

cou = mysql_db1()

2.创建游标

with cou.cursor() as cu:
    cu.execute(sql)      使用execute方法进行查询语句
    commt = cu.fetchone()     返回一条数据的查询的结果
    print(commt)

# 函数调用
mysql_db1()

到此这篇关于python上下文管理器协议的实现的文章就介绍到这了,更多相关python上下文管理器 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python实现代码统计程序

    python实现代码统计程序

    这篇文章主要为大家详细介绍了python实现代码统计程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • Python使用pip安装Matplotlib的方法详解

    Python使用pip安装Matplotlib的方法详解

    在网上看见许多matplotlib的安装教程都是比较复杂,需要配置许多环境,对于电脑基础不好的人来说可是一件头疼的事情,今天我介绍一个简单的安装方法,下面这篇文章主要给大家介绍了关于Python使用pip安装Matplotlib的相关资料,需要的朋友可以参考下
    2022-07-07
  • 详解model.train()和model.eval()两种模式的原理与用法

    详解model.train()和model.eval()两种模式的原理与用法

    这篇文章主要介绍了详解model.train()和model.eval()两种模式的原理与用法,相信很多没有经验的人对此束手无策,那么看完这篇文章一定会对你有所帮助
    2023-03-03
  • 在Linux命令行中运行Python脚本的流程步骤

    在Linux命令行中运行Python脚本的流程步骤

    Python是一种高级编程语言,被广泛应用于数据科学、机器学习、Web 开发等领域,在Linux操作系统中,Python是一个默认安装的解释器,用户可以通过命令行界面(CLI)来运行Python脚本,在本文中,我们将详细介绍如何在Linux命令行中运行Python脚本,需要的朋友可以参考下
    2023-11-11
  • 十条建议帮你提高Python编程效率

    十条建议帮你提高Python编程效率

    这篇文章主要为大家介绍了十条建议,可以帮你提高Python编程效率的10条,想要提升提高Python编程效率的朋友不要错过
    2016-02-02
  • 关于tf.reverse_sequence()简述

    关于tf.reverse_sequence()简述

    今天小编就为大家分享一篇关于tf.reverse_sequence()简述,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • python爱心表白 每天都是浪漫七夕!

    python爱心表白 每天都是浪漫七夕!

    每天都是浪漫七夕!这篇文章主要为大家详细介绍了python爱心表白,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • Python入门篇之对象类型

    Python入门篇之对象类型

    本章中我们将讲述Python的对象类型,包括数字、整型、布尔型、长整形、浮点型、复数型、字符串、列表、元组、字典等。
    2014-10-10
  • keras load model时出现Missing Layer错误的解决方式

    keras load model时出现Missing Layer错误的解决方式

    这篇文章主要介绍了keras load model时出现Missing Layer错误的解决方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • python/golang 删除链表中的元素

    python/golang 删除链表中的元素

    这篇文章主要介绍了python/golang 如何删除链表中的元素,帮助大家更好的理解和使用python/golang,感兴趣的朋友可以了解下
    2020-09-09

最新评论