一、知识点来源于知乎回答。所以我不制造答案,我只是答案的搬运工~~~
1、先看:
Python 中的 classmethod 和 staticmethod 有什么具体用途? - 李保银的回答
讲明白了:@classmethod和@staticmethod是什么。
2、再看:
oop - Python @classmethod and @staticmethod for beginner?
讲明白了:什么时候用、怎么用。
3、继续:
oop - Python @classmethod and @staticmethod for beginner?
这个答案是对2的补充。
以下内容为自己对回答的总结理解。
二、什么时候用classmethod:
java或者C++中有构造器重载,而python不支持。
classmethod的一个用途,你可以重构一个类的时候,无需更新构造器的代码,重新写一个classmethod,返回你所需要的类实例。简而言之:返回经过预处理的用户所需实例。
class Data_test2(object):
day=0
month=0
year=0
def __init__(self,year=0,month=0,day=0):
self.day=day
self.month=month
self.year=year
@classmethod
def get_date(cls,data_as_string):
#这里第一个参数是cls, 表示调用当前的类名
year,month,day=map(int,string_date.split('-'))
date1=cls(year,month,day)
#返回的是一个初始化后的类
return date1
另一个用途:如果您有一个类MyClass,以及一个在MyClass(工厂,依赖注入存根等)上运行的模块级函数,则使其成为一个类方法。然后它将可用于子类。
三、什么时候用staticmethod:
参考网络资料,有如下评价:
1. 代码易读性.静态方法并不需要self参数
2. 节约内存.不用每个实例都实例化方法.
所以,目前感觉上,当你无需访问类的属性,或者对象实例属性和其他方法的时候,可以这么写。