类方法
类方法是指类对象所拥有的方法,需要用装饰器@classmethod来标识其为类方法。对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数。类方法可以通过类对象,实例对象调用
案例:
类方法主要可以对类属性进行访问、修改
实操
如果通过实例对象去访问这个方法,可以吗?
答案是可以的
在类方法里面可以修改类属性吗?
可以看到修改成功
静态方法
静态方法是指类对象所拥有的方法,需要用@staticmethod来表示静态方法,静态方法不需要传任何参数。
案例
实操
注意:一般不会通过实例对象来访问静态方法,这样没有任何意义
为什么要使用静态方法呢?
由于静态方法来存放逻辑性的代码,本身和类已经实例对象没有交互,也就是说,在静态方法中,不会涉及到类中方法和属性的操作。
数据资源能得到有效的充分利用
例子
返回当前的系统时间
我们可以看到,虽然这里写了init函数,但并没有实例化属性所以也并没有用到,showTime是作为一个单独的、独立的模块在运行,这也是静态方法存在的意义
但如果你就是想要用实例对象来调用,那也是可以的
但我们可以观察到并没有用,因为静态方法中已经设定了时间取得是localtime,所以完全没有必要用实例对象去访问静态方法。
类方法、实例方法、静态方法对比
1、类方法的第一个参数是类对象cls,通过cls引用的类对象的属性和方法。 @classmethod来修饰
2、实例方法的第一个参数是实例对象self,通过self引用的可能是类属性,也有可能是实例属性【具体情况具体分析】,不过在存在相同名称的类属性和实例属性的情况下,实例属性优先级更高。
3、静态方法中不需要额外定义参数,因此在静态方法中引用类属性的话,必须通过类对象来引用。@staticmethod来修饰
来试一试带参数的静态方法
(在静态方法中的第一个实操里面添加)
所以说带不带参数并不是强制性的,而是根据自己决定