Python知识点之classmethod和staticmethod使用

一、知识点来源于知乎回答。所以我不制造答案,我只是答案的搬运工~~~

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. 节约内存.不用每个实例都实例化方法.

所以,目前感觉上,当你无需访问类的属性,或者对象实例属性和其他方法的时候,可以这么写。

你可能感兴趣的:(Python知识点之classmethod和staticmethod使用)