Python--@classmethod和@staticmethod的区别以及装饰器的作用

本文详细解析Python中的@classmethod与@staticmethod类方法,以及装饰器的使用技巧,帮助读者掌握更灵活的编程方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@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官方文档。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值