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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文部分提炼自书籍:《Effective Python》&《Python3 Cookbook》,但也做出了修改,并...
    罗义的夏天阅读 1,825评论 0 2
  • Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理。这种动态语言的...
    有一种再见叫青春阅读 609评论 0 3
  • 贾政谨:有哪些比“我爱你”更戳心的表白? —— 贾政谨(知乎)以前不懂事的时候和女盆友经常吵架,每一次她都摔门...
    岚风的叶子阅读 491评论 0 0
  • 多图杀猫,多字杀马特。 昨天树丰老师给我发了他自己和另一个队友关于碎碎念的看法,简单来说就是我手写我心。想到哪写到...
    闻舒阅读 253评论 2 2