Python中类方法介绍

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)

运行结果:

然而上面的功能不用类方法也能实现,那么这就体现不了类方法的必要性,关于类方法的必要性有时间在去探究吧……

原创文章 2 获赞 3 访问量 157

猜你喜欢

转载自blog.csdn.net/lonly_girl/article/details/106104791