python staticmethod与classmethod(还没开始写)
写在前面
写博客的时候,我发现拖延症很严重,本来昨天要开始写的,结果东看看,西翻翻,啥也没落实下来。时间过去了,口袋里的收获却寥寥无几。讨厌这样的自己。我要戒掉这个不好的毛病。
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
