浅谈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一样

创建一个对象,用对象引用实例属性就好了。
综上所述:
类⽅法使⽤场景:
当⽅法中需要使⽤类对象 (如访问私有类属性等)时,定义类⽅法,类⽅法⼀般和类属性配合使⽤。
静态⽅法使⽤场景:
当⽅法中 既不需要使⽤实例对象(如实例对象,实例属性),也不需要使⽤类对象 (如类属性、类⽅法、创建实例等)时,定义静态⽅法取消不需要的参数传递,有利于 减少不必要的内存占⽤和性能消耗。
本文深入探讨了Python中的@classmethod和@staticmethod。类方法允许通过类直接访问实例属性,常与类属性配合使用;静态方法则不依赖类或实例,适用于与类或实例无关的通用功能。了解这两种方法的适用场景有助于优化代码结构和性能。

3192

被折叠的 条评论
为什么被折叠?



