千家信息网

python的类方法classmethod怎么使用

发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,这篇文章主要介绍"python的类方法classmethod怎么使用",在日常操作中,相信很多人在python的类方法classmethod怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的
千家信息网最后更新 2024年11月23日python的类方法classmethod怎么使用

这篇文章主要介绍"python的类方法classmethod怎么使用",在日常操作中,相信很多人在python的类方法classmethod怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"python的类方法classmethod怎么使用"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

@classmethod的定义

@classmethod是装饰器,用来指定类中的某个方法是类的绑定方法。

@classmethod装饰与否的区别

  • 实例的绑定方法

在类中定义的方法默认是实例的绑定方法,实例的绑定方法第一参数是self,self指代实例的命名空间内存地址。必须有实例才能调用。

调用方式有2种:一是"实例.方法名()",二是"类名.方法名(实例名)",调用的前提是已创建了实例,没有实例调用会报错!

  • 类的绑定方法

在类中定义的方法前加上@classmethod装饰表示它是类的绑定方法,类中的绑定方法第一参数是cls,cls指代类的命名空间内存地址。有没有实例都可以调用。

调用方式有2种:一种是"类名.方法名()",二是"实例.方法名()",调用前不需要创建实例,没有实例也可以调用。

@classmethod运用场景

常见的运用场景有2种,一是调用类的绑定方法创建实例;二是修改类的私有属性。

案例一,调用类的绑定方法创建实例:

import timeclass Date:def __init__(self, year, month, day):self.year = year        self.month = month        self.day = day    @classmethoddef today(cls):now = time.localtime()return Date(now.tm_year, now.tm_mon, now.tm_mday)today = Date.today()print(f'今天是"{today.year}年{today.month}月{today.day}日"')out:今天是"2020年11月9日"

讲解

上述Date类中有2个方法,一个是__init__即实例的初始化方法,另一个是today即类的绑定方法,通过调用Date.today()可以无参数自主创建实例。这个在实际生产中经常会用到。请用心体类的绑定方法创建实例的方式。

案例二,调用类的绑定方法修改类的私有属性:

class Goods:__discount = 1  # 折扣比例def __init__(self, name, price):self.name = name  # 商品名称self.price = price  # 商品价格@propertydef total(self):  # 商品总价return self.price*self.__discount    @classmethoddef change_discount(cls, n):Goods.__discount = napple = Goods('苹果', 5)print(apple.total)Goods.change_discount(0.8)print(apple.total)pear = Goods('梨', 4)print(pear.total)out:54.03.2

上述代码中类的私有属性discount是控制全场商品折扣比例,在类的外部无法修改私有属性。只能在类的内部定义类的绑定方法来修改类的私有属性。

请注意实例的属性和类的属性区别:

实例的属性是存储在实例各自的命名空间中,所以有多少个实例就会有多少份相应的实例属性。

类的属性是存储在类的命名空间中,所以类的属性只有一份(无论有多少个实例)。

到此,关于"python的类方法classmethod怎么使用"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0