写在前面

写博客的时候,我发现拖延症很严重,本来昨天要开始写的,结果东看看,西翻翻,啥也没落实下来。时间过去了,口袋里的收获却寥寥无几。讨厌这样的自己。我要戒掉这个不好的毛病。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

拖延症的底层原因之一是:不知如何下手

拖延症的底层原因之二是:每天都重复,疲了,累了

这里仅代表我自己

 

 

一..先说staticmethod

1..什么是staticmethod

 

2..staticmethod有什么用

3..举个例子来理解staticmethod

 

二..再说classmethod

1..什么是classmethod

classmethod是用来指定一个类的方法为类方法

长的像下面这个样子

class cc:
    @classmethod
    def f(cls, arg1, arg2, ...): ...

 

cls通常用作类方法的第一参数  跟self有点类似( __init__里面的slef通常用作实例方法的第一参数)。即通常用self来传递当前类对象的实例,cls传递当前类对象。

self 和cls 没有特别的含义,作用只是把参数绑定到普通的函数上, 不一定非得是slef 或cls   , 可以换成别的xxx

 

 

 

2..为什么会出现classmethod

(下面的比较琐碎,也不讲章法,但是这些点点滴滴我想记录下来,因为他们帮助我拼凑了这类知识的框架体系。我很喜欢用拼凑这个词,每次碰到一个完全陌生的鬼,总是这儿点点,那儿翻翻,每个足迹都会留下一点点碎片,慢慢的,逛的久了,再动手写写,基本上这一类内容在我脑子里渐渐形成个轮廓了,这个轮廓就是这些碎片拼凑出来的)

 

1--classmethod设计的目的是什么呢?事实上与Python面向对象编程有关的,由于Python不支持多个的參数重载构造函数,比方在C++里,构造函数能够依据參数个数不一样。能够写多个构造函数。Python为了解决问题,採用classmethod修饰符的方式,这样定义出来的函数就能够在类对象实例化之前调用这些函数,就相当于多个构造函数,解决多个构造函数的代码写在类外面的问题。

 

2---类最基本的作用是实例化出一个对象,但是有的时候再实例化之前,就需要先和类做一定的交互,这种交互可能会影响实际实例化的过程,所以必须放在调用构造函数之前。大概也可能是因为这个原因出现了classmethod

 

3---直接一点来说,我们知道对于一个普通的类,我们要使用其中的函数的话,需要对类进行实例化,而一个类中,某个函数前面加上了staticmethod或者classmethod的话,那么这个函数就可以不通过实例化直接调用,

可以通过类名进行调用的

 

 




3..classmethod有什么用

在Java等语言中,这类功能通常通过工厂类(Factory)实现,先初始化一个工厂类的实例,然后由这个工厂类的实例构造实际需要的实例。在Python中,普通类完全可以替代Factory,而对于支持配置的Factory,就对应到相应的classmethod。

 

 

 

4..举个例子来理解classmethod

 

 

 

参考

https://www.cnblogs.com/zfyouxi/p/5222811.html

http://30daydo.com/article/89

 https://www.zhihu.com/question/20021164

 https://blog.csdn.net/mr_hui_/article/details/82939979

https://www.cnblogs.com/agnewee/p/5653936.html

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄