首页 > 开发 > Python > 正文

Python classmethod()方法

2023-04-24 19:21:36
字体:
来源:转载
供稿:网友

python classmethod()是Python标准库中的一个内置方法。在Python中,有三种类型的方法,分别是:实例方法、类方法和静态方法。

这篇文章首先介绍一下类方法的含义及使用方法。

classmethod()方法是什么

在Python中,类方法是可以使用类名直接调用的方法,类方法可以在类的所有对象中进行共享。classmethod()方法可以把类中的一个方法转化为类方法,但要求类中定义的那个方法的第一个参数是 cls ,当然这只是约定俗成的,使用其他标识符也可以,主要用于隐式的表示类自身,以调用类的属性、方法,以及实例化对象等,这点与实例方法中的 self 参数相似。

类方法即可以使用类来调用(如C.f()),又可以使用类的实例来调用(如C().f())。如果类方法由派生类来调用,则派生类的对象将作为classmethod()的第一个参数。

Python中的类方法与Java、C#等中的静态方法不同,这些问题将在今后的文章中进行探讨。

Python classmethod()方法

classmethod()的语法

该方法的语法格式如下:

classmethod(function)

参数

function:用于指定类中转换为类方法的方法名称,当然也应该包含类名。

返回值

该函数没有返回值。

classmethod()使用示例

下面使用实例来说明classmethod()方法的具体使用过程。

class Hello:
    word = "你好"

    def SayHello(cls):
        print(cls.word)

#定义一个实例
h = Hello()
#实例调用SayHello
h.SayHello()
#Hello.SayHello() #这时使用会报错

#将SayHello指定为类方法
Hello.SayHello= classmethod(Hello.SayHello)
#用实例来调用
h.SayHello() #你好
#用类方法
Hello.SayHello() #你好

#用实例修改word的值
h.word="关注:优雅的代码"
h.SayHello() #你好
Hello.SayHello() #你好

#用类名修改word的值
Hello.word="优雅的代码"
h.SayHello() #优雅的代码
Hello.SayHello() #优雅的代码

输出结果如下:(上面代码为了让大家看得清楚,使用注释方法也注释了输出内容。)

你好
你好
你好
你好
你好
优雅的代码
优雅的代码

从上面的代码及输出结果可以看出:

(1)类方法中可以访问类的变量和方法;

(2)类方法可以使用类名调用,也可以使用类的实例调用;

(3)把一个方法转换成类方法后,使用实例调用时只能读取类共享的变量值,无法获取实例的变量值;

(4)类方法不能获取实例的变量值,只能读取类共享的变量值,即类变量的默认值或使用类名调用变量修改的值。

下面再看一个例子:

class Hello:
    word = "你好"

    def SayHello(self):
        print(self.word)

    def Say(cls, w):
        cls.word = w
        cls.SayHello()

Hello.SayHello = classmethod(Hello.SayHello)
Hello.Say = classmethod(Hello.Say)

Hello.SayHello()
Hello.Say("欢迎关注微信订阅号:优雅的代码")

输出结果如下所示:

你好
欢迎关注微信订阅号:优雅的代码

这段代码主要演示类方法带有其它参数的情况。

classmethod()方法是在Python 2.2版本加进来的,但很明显这种定义类方法的过程还是很麻烦,在Python2.4版本中使用方法修饰符的方法来实现,即在类中需要定义类方法上面使用@classmethod修饰符来指定该方法为类方法。其基本语法格式如下:

class className:
    @classmethod
    def funname(cls, arg1,arg2,...):
        #方法的相关代码

上面的@classmethod是funname()方法的修饰符,它指示funname()是一个类方法。下面看一个具体的例子:

class Student:
    age = 23

    @classmethod
    def printAge(cls):
        print(cls.age)

Student.printAge()

输出结果:

23

使用@classmethod修饰符指定的类方法与上面所讲的要求相同。

以上讲解了关于Python中classmethod()方法和@classmethod修饰符的作用,如有问题,欢迎留言。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表