python浅谈python@classmethod,@staticmethod

本文深入探讨了Python中的@classmethod和@staticmethod。类方法允许通过类直接访问实例属性,常与类属性配合使用;静态方法则不依赖类或实例,适用于与类或实例无关的通用功能。了解这两种方法的适用场景有助于优化代码结构和性能。

浅谈python@classmethod,@staticmethod

一、关于@classmethod

## 首先我们区分一下类属性和实例属性:

1.下面展示一些类属性代码。

# 1. 定义类,定义类属性
class Dog(object):
    tooth = 10


# 2. 创建对象
wangcai = Dog()
xiaohei = Dog()

# 3. 访问类属性: 类和对象
print(Dog.tooth)
print(wangcai.tooth)
print(xiaohei.tooth)

类属性是指定义在类中,并且在函数体外的属性。类属性可以在类的所有实例之间共享值,也就是在所有实例化的对象中公用。

2.下面展示一些 实例属性。

class Dog(object):
 	def __init__(self):
 		self.age = 5
 	def info_print(self):
 		print(self.age)
wangcai = Dog()
print(wangcai.age) # 5
# print(Dog.age) # 报错:实例属性不能通过类访问
wangcai.info_print() # 5

实例属性是指定义在类的方法中的属性,只作用于当前实例中。创建一个Dog类,该类中有3个方法,init()初始化方法,info_print输出详细信息方法。在__init__()初始化方法中,使用self.age设置实例属性。

正文

当我们引用装饰器,将函数转换成为一个类方法后,我们可以直接通过类名+函数名来访问实例属性。
在这里插入图片描述
当把装饰器删除后,最后一句访问语句报错。
在这里插入图片描述

当我们将小明作为实例,通过小明实例又可以访问实例属性,又可以访问成功。
在这里插入图片描述

二、关于@staticmethod

代码如下(示例):
在这里插入图片描述
这里我们不仅可以用类名来引用,也可以用对象名来引用。
在这里插入图片描述
删除装饰器后,报错的类型和@classmethod一样

在这里插入图片描述
创建一个对象,用对象引用实例属性就好了。


综上所述:

类⽅法使⽤场景:
当⽅法中需要使⽤类对象 (如访问私有类属性等)时,定义类⽅法,类⽅法⼀般和类属性配合使⽤。

静态⽅法使⽤场景:
当⽅法中 既不需要使⽤实例对象(如实例对象,实例属性),也不需要使⽤类对象 (如类属性、类⽅法、创建实例等)时,定义静态⽅法取消不需要的参数传递,有利于 减少不必要的内存占⽤和性能消耗。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值