2021-04-22 COMP9021第十八节课笔记

本文深入讲解Python装饰器的基础、入门及高级用法,包括特殊函数call的重载、@符号的使用、函数作为参数传递等内容,并探讨静态方法、类方法等修饰符的应用。


第十七节课讲了一个notes,内容是Levenshtein Distance,没怎么听,目测不会考,就不写了。
这是最后一节课笔记,内容是装饰器。

Decorators - 装饰器

基础篇

  1. 特殊函数:call
    在自定义的这个类里重载这个特殊函数Call之后,一个类就变成一个特殊函数了。
    当然使用之前必须像【5】一样先赋给一个变量。
    在这里插入图片描述
  2. 加一个初始化
    把一个函数作为这个类的初始化参数,这样可以配合call函数输出结果。
    在这里插入图片描述

入门篇

  1. 装饰器符号 @
    加了这个@就让add这个函数直接成了class C的内部函数。
    调用add的时候相当于通过调用class C的Call函数来调用的add。
    省去了把class赋给一个变量的步骤,但效果是一样的。
    在这里插入图片描述
    1. 函数参数中有默认参数的例子
      正常使用
      在这里插入图片描述
      call函数中加一个星号
      在这里插入图片描述
      call函数加一个星号把前面的参数打包
      在这里插入图片描述
      call函数加两个星号将默认函数打包
      传进去的默认参数竟然是字典。
      在这里插入图片描述
      还可以像下面这样直接通过类名调用。
      注意:把类赋给变量之后,里面的内容是保存了的。
      直接像红框中那样调用类是每次都初始化了一个对象,输出完就没了。
      在这里插入图片描述

高级篇

  1. 装饰器是一个函数
    前面的都是一个类装饰一个函数,这里是函数装饰函数。
    如下图,传进去cout_calls的参数是函数add_up这个对象,add_up的参数实际上是写在后面穿进函数count_calls的。具体是怎么实现这种操作的,我也不懂,懒得查了,有明白的同学在下面回复下呗。
    注意,这里只有在@count_calls那儿初始化了,后面那个注释只是举例。。所以还是有一点点不一样。
    在这里插入图片描述
  2. 调用嵌套函数里的函数
    emmm, 看注释吧,几个字说不清楚。
    未来某天的自己:wq,不要这么懒行不行。
    在这里插入图片描述
  3. 函数装饰类
    在这里插入图片描述

python内置修饰符

官方文档:所有内置函数,高亮的是decorator
其他文档:Chapter 25, decorators

静态方法 - @staticmethod

正常来说一个类方法第一个参数有个self,但是这次咱们没有加self,通过类名C可以直接调用。
那么一个实例想要调用这些方法需要加上@staticmethod这个修饰符,否则会报错。
在这里插入图片描述
有人说我加上self不就行了么,我试试
在这里插入图片描述
在这里插入图片描述
对比发现,如果加上self,就不能通过类名调用函数了,必须先实例一个对象,通过对象调用。

类方法 - @classmethod

参考资料:@staticmethod
classmethod 修饰符对应的函数不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的 cls 参数,可以来调用类的属性,类的方法,实例化对象等。

在这里插入图片描述

解释器 - Descriptor

官方文档:Descriptor
老师的notes:
在这里插入图片描述

内容如图。注意用del删除属性之后就没有这个属性了
在这里插入图片描述

小练习

一切正常。
在这里插入图片描述

@property

官方文档:@property

该说的老师都说了, 就是用了property这个修饰符之后,下面的那个函数datum就变成了一个解释器,且带有内建函数 getter, setter and deleter等等。。看例子,挺好理解的。
在这里插入图片描述

不想看,就不会考

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值