首先,with语法通过一个__enter__()方法和一个__exit__()方法,实现自动在某个命令前后执行特定内容,比如,通过with open()可以实现在with语句结束后自动close文件句柄。反正就是非常方便了,具体用法可行自行搜索,不是本文重点。
另外,Python支持类的嵌套,内部类的作用也可以自行再搜索。会发现平时不怎么用,会觉得他很鸡肋,但当用到的时候,就会觉得非常之方便。
这里实现一个功能:有一个变量,在执行某些操作前后需要设置和撤销该变量的值,以便控制其他线程的运行。表述的可能不是很明白,直接上一下演示代码:
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()
运行效果: