初学者初学者python笔记(类的装饰器、笔记(类的装饰器、property方法、元类)方法、元类)
文章目录文章目录上下文协议管理类的装饰器基本原理property方法的巧用利用描述符自定制propertyproperty下的setter与
deleterPython的元类元类的概念自定义元类
本篇是面向对象编程的进阶知识,内容稍微有点抽象,但是每处都标足了注释和运行结果,可以参考着学习。内容主要涉及上
下文协议管理、类的装饰器使用、
property
方法、元类四个方面
上下文协议管理上下文协议管理
就是就是with … as …这种方式的使用原理这种方式的使用原理
class Foo:
def __init__(self,name,age):
self.name= name
self.age= age
def __enter__(self): #当调用类Foo时就会触发__enter__方法
print('__enter__正在被触发')
return self #将类Foo的属性作为返回值
def __exit__(self,exc_type,exc_val,exc_tb): #self后的三个参数为必要属性
print('执行__exit__')
#当整个类执行完毕以后就会触发exit的运行,
#或者执行过程中出现了异常也会触发exit方法的运行,并停止程序的运行
#但若返回一个True就不会停止整个程序的运行,只是停止类的执行,后续代码可以继续执行
return True
with Foo('a.txt',18) as f: #只要调用了with Foo...就是触发__enter__
#将一个文件传入Foo中,因为返回值是self属性,所以f就代表了self
print(f.name) #可直接调用,相当于self.name
#一个错误语句
print(djksjsgg)
#with ... as ...就是上下文协议管理,打开文件也是这个原理,当文件执行完毕后会自动关闭
with open('a.txt','r',encoding='gbk') as fi:
re = fi.read()
print(re)
print('===============》》》结束')
运行结果:
类的装饰器基本原理类的装饰器基本原理
要知道,在Python中,一切皆对象;所以装饰器不仅可以修饰函数,还可以修饰类;可以用函数来定义,也可以用类(描述
符)来定义
#定义一个装饰器(本质上就是个修饰函数的函数)
def adorn1(func):
print('=========>>>')
func.x = 1314 #给函数加一属性x
return func
@adorn1 #加上装饰器,相当于test=deco(test),把原函数放进装饰器处理后返回给原函数
def test():
print('test函数运行了')
test() #调用函数
#神奇一幕,一切皆对象,就连函数都可以有属性字典
print(test.x) #输出函数的属性x
print(test.__dict__) #输出函数的属性字典
print('===========================>>>')