类方法,是在类对象定义时用的。
在类方法中,可以获取类的属性或者调用其他类的方法。
使用类方法,是为了贴合现象对象编程中特别强调的一个特性,数据封装性。
如果在类的外部(类定义外),对属性值获取或者赋值,和封装特性正好背道而驰。
我们在昨天的代码基础上,稍作改动。
在cat类定义的最后部分,通过加上@classmethod标识,这是一个类方法。
类方法的第一个参数,和类定义的不同,不是self,而是cls。
在使用属性值或局部变量时,通过前面的cls.来实现,和self的用法异曲同工。
我们通过下面三种不同的使用方法,来看看cls,指代的到底是哪里?
通过代码的执行,可以看到结果和昨天是一样。
昨天使用了第三种方法(19行)获取属性值,虽然类似,但是昨天是用cat类定义的名字,今天是用cat3实例化的名字。
第二种方法,用的是cat类定义的调用方法获取属性值。
第一种方法,通过cat1实例化对象调用的方法,来获取属性值。
可以得到结论,无论是类定义还是类实例化对象,调用方法的结果都是一样的。
可以看得出来,cls指代的是类本身,而self指代的是实例化对象。
PS:本文代码基于Windows 10,Python 3.10.4。
热门跟贴