@classmethod 类方法
1.至少有一个参数cls(代表类本身),cls代表类本身,不需要传入self参数
2.调用:类名.方法或属性、cls.方法或属性
说明:在一个类中,要调用方法或属性,一般都要创建实例,才能调用。但是有时候会觉得创建实例比较麻烦,使用@classmethod,可用不创建实例就能调用此类方法。相比于@staticmethod 在调用方面会显得更加自由、灵活。比静态类不一样的就是它可以传进来一个当前类作为第一个参数
@staticmethod 静态方法
1.不用传入self参数
2.调用:只能使用 类名.方法或属性 的方式调用
说明:静态方法,就像一个在类里面的普通函数,没有self(代表对象自身)参数。
装饰器
装饰器定义:装饰器本质上就是一个python函数,它可以让其它函数在不需要做任何代码改动的前提下增加额外的功能,装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景中,比如-- >插入日志、性能测试、事务处理、缓存、权限校验等场景。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同的代码并且可以重复使用。
装饰器的作用:为已经存在的函数或者对象添加额外的功能
装饰器的写法:
import functools
def print_func_name(func):
@functools.wraps(func)
def wrapper(*agrs, **kwargs):
print(func.name)
res = func(*agrs, **kwagrs)
return res
return wrapper
@print_func_name
def hello_world():
print(‘hello world!’)
如此使用装饰器,就会将这个函数的名称打印出来。有一点大家要小心,在不使用@functools.wraps(func)的普通的装饰器,打印出来的会是wrapper,而不是原函数的名字,wrapper函数会将其覆盖掉,因此python为了区别这些,就发明了@functools.wraps(func)这个模块,以供我们区别对待。
使用@functools.wraps(func)之后,就会打印原来函数的名字。
具体@functools.wraps(func)的用法,请参考python官方文档。