python中三种类方法

实例方法、类方法与静态方法

Posted by 周自横 on April 25, 2020

python类的三种方法

类实例方法

通常情况下,在类中定义的方法都默认为实例方法,即使是实例方法理论上也属于实例方法,只不过比较特殊

实例方法的最大特点就是至少要包含一个self函数(实例方法的名称也许就来源于此,self表示的是实例化的对象),用于绑定调用此方法的实例对象(python会自动完成绑定)。

实例方法通常会用类的实例对象直接调用:

class CLanguage():
    def say(self):
        print("正在调用 say() 实例方法")
clang = CLanguage()
clang.say()

也支持使用类名调用实例方法,这种方式需要手动给self传参数

clang = CLanguage()
CLanguage.say(clang)

类方法

类方法和实例方法相似,它至少要要包含一个参数,只不过类方法种通常将其命名clspython会自动将类模板本身绑定给cls参数,而不是类的对象(实例),也就是我们在调用类方法时候,不需要显式的给cls传参。与self相同,cls的命名也不是规定的,只是约定俗成

与实例方法的最大的不同在于,类方法需要@classmethod修饰符修饰

类方法推荐使用类名直接调用,虽然可以用实例对象但是不推荐。

class CLanguage:
    #类构造方法,也属于实例方法
    def __init__(self):
        self.name = "C语言中文网"
        self.add = "http://c.biancheng.net"
    #下面定义了一个类方法
    @classmethod
    def info(cls):
        print("正在调用类方法",cls)
#使用类名直接调用类方法
CLanguage.info()# 正在调用类方法
#使用类对象调用类方法
clang = CLanguage()
clang.info()# 正在调用类方法

类静态方法

静态方法就是我们学过的函数,但是区别在于静态方定义在类这个空间(类命名空间)种,而函数定义在程序所在的空间(全局命名空间)种

静态方法没有类似clsself这样的特殊参数,python解释器不会对它包含的参数做任何类或者对象的绑定。正因为这样,类静态方法无法调用任何类属性和类方法

需要@staticmethod修饰符修饰

调用可以用类名也可以用实例对象

class CLanguage:
    @staticmethod
    def info(name,add):
        print(name,add)
#使用类名直接调用静态方法
CLanguage.info("C语言中文网","http://c.biancheng.net")
#使用类对象调用静态方法
clang = CLanguage()
clang.info("Python教程","http://c.biancheng.net/python")

实际中几乎不会用到类方法和静态方法,因为可以用函数代替他们试下想要的功能

本文是对python类中的三种方法进行了学习