前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python内部类调用外部类的变量,并结合with语法使用

Python内部类调用外部类的变量,并结合with语法使用

作者头像
小锋学长生活大爆炸
发布2022-05-09 16:04:05
1.5K0
发布2022-05-09 16:04:05
举报

        首先,with语法通过一个__enter__()方法和一个__exit__()方法,实现自动在某个命令前后执行特定内容,比如,通过with open()可以实现在with语句结束后自动close文件句柄。反正就是非常方便了,具体用法可行自行搜索,不是本文重点。

        另外,Python支持类的嵌套内部类的作用也可以自行再搜索。会发现平时不怎么用,会觉得他很鸡肋,但当用到的时候,就会觉得非常之方便。

        这里实现一个功能:有一个变量,在执行某些操作前后需要设置和撤销该变量的值,以便控制其他线程的运行。表述的可能不是很明白,直接上一下演示代码:

代码语言:javascript
复制
class Outter:
    """
    外部类
    """
    def __init__(self):
        self.allow_thread_running = True

    class with_change_ip:
        """
        内部类,使用with语法
        """
        def __init__(self, father):
            """
            内部类初始化函数,构造时自动调用
            :param father: 外部类的实例对象
            """
            self.father = father

        def __enter__(self):
            """
            with语法执行前调用
            :return:
            """
            self.father.allow_thread_running = False

        def __exit__(self, type, value, trace):
            """
            with语法执行完后调用
            :return:
            """
            self.father.allow_thread_running = True

    def start(self):
        print(self.allow_thread_running)      # True
        # 传入当前实例对象作为参数
        with self.with_change_ip(self):
            print(self.allow_thread_running)  # False
        print(self.allow_thread_running)      # True
  
Outter().start()

运行效果:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档