Python中类方法介绍
写在前面
最近在学习Python的基础内容,遇到Python中的静态方法和类方法,找了很多资料,想要去搞懂这两个方法是拿来做什么的,或者说为什么在Python中插入静态方法和类方法?然而网上对于这方面的资料似乎很少,有也是往往强调这两个方法的如何使用,继承情况,没有详细去介绍Python类中移入这两个方法的背景是什么,那么我今天就来和大家分享以下,我对这两个方法的理解。
正文
要想深入地体会类的方法,我们要先来聊聊Python的类。Python创建类的方式没啥新意,和其他高级语言一样,Python也是通过关键字class
创建类。对于Python创建的类,我们有一个很形象的词语来形容它,叫实例工厂。为什么拿实例工厂来形容类呢?原因是类就像工厂一样,可以源源不断地生产类对象,也叫实例。这里体现的是面向对象的编程思想。
ok!说到这里我们脑子里面有了两个概念:类、实例。那么是什么方法呢?方法是用来定义对象行为的东西,就是说我们有了类、有了实例还不行,我们还要定义他们帮我们完成一系列工作的方法,比如print一些内容什么的。定义类行为的方法叫做类方法,那么定义实例行为的方法就叫做实例方法。二者的具体情况如下代码段可见:
class People(): #创建People类
#定义初始化方法
def __init__(self):
pass
#定义实例方法
def instance_method(self):
pass
#定义类方法
@classmethod
def class_method(cls):
pass
类方法和实例方法会同时被写到类的脚本中,类方法的定义和实例方法的定义有很大的差别,差别1:类方法的定义形式就是在类方式头上加上装饰器@classmethod
,声明这是一个类方法;差别2:类方法传入的参数是cls
,不是self
。如果说差别1是在大声告诉你或者编译器,这是一个类方法的话,那么差别2就直接指定了方法定义的是什么对象的行为。实例方法中传入的参数self
,指明方法定义的是实例的行为,关键字self
指向的是当前实例;而关键字cls
指明方法定义的是类行为。
那么为什要引入类方法呢?其实答案从上面的内容已经呼之欲出了。类方法定义的是类的行为,不像实例方法定义的是实例的行为,可以将这个理解成:有一个可以制造电脑主机的工厂,实例方法对应的就是电脑主机能做啥事,比如看电影,打游戏……类方法对应的是工厂能够啥,比如工厂要记录一共生产了多少台主机,记录所有主机的信息等。
import time
# 创建工厂类
class Computer_Factory():
created_time_list=[] #类变量,list 记录类的所有实例创建的时间
instancenum=0 #类变量,int 记录类创建实例的数量
def __init__(self): # 初始化方法
self.var_time=time.asctime(time.localtime(time.time()))
self.all_instance_info(self.var_time)
def show_info(self): #实例方法
print(self.var_time)
@classmethod #类方法
def all_instance_info(cls,time):
cls.created_time_list.append(time) #记录时间
cls.instancenum += 1 #记录创建实例的数量
if __name__ == '__main__':
# 创建两个对象
computer_1=Computer_Factory()
computer_2=Computer_Factory()
#实例1信息
print("实例1信息显示:")
computer_1.show_info()
print(Computer_Factory.created_time_list[0])
#实例2信息
print("实例2信息显示:")
computer_2.show_info()
print(Computer_Factory.created_time_list[1])
#显示创建实例对象
print("显示创建实例总数量:")
print(Computer_Factory.instancenum)
运行结果:
然而上面的功能不用类方法也能实现,那么这就体现不了类方法的必要性,关于类方法的必要性有时间在去探究吧……