文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python @classmethod详解

2023-09-13 10:50

关注

classmethod 修饰符对应的函数不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的cls参数,
可以来调用类的属性,类的方法,实例化对象等。
废话不多说,直接上代码
1.简洁调用方式

class TestClass(object):    def __init__(self, data_str):        self.data_str = data_str    def get_year(self):        data_list = self.data_str.split('.')        print(data_list[0])class TestClass2(object):    def __init__(self, data_str):        self.data_str = data_str    @classmethod    def get_year(cls, data_str):        data_list = data_str.split('.')        print(data_list[0])tc = TestClass('1992.9.2') # 实例化类tc.get_year()              # 再调用类方法TestClass2.get_year('1992.9.2') # 直接调用类方法

TestClass 类使用的是普通的成员方法
TestClass2 则使用classmethod修饰方法
可以看到,TestClass2在调用类方法时,不需要实例化类,更加简洁

2.方便扩展功能

请看下面代码

class TestClass(object):    day = ''    month = ''    year = ''    def __init__(self, year='', month='', day=''):        self.day = day        self.month = month        self.year = year    def out_print(self):        print('year: %s month: %s day: %s' %(self.year, self.month, self.day))ss = TestClass('2022','10','24')ss.out_print()

输出 year: 2022 month: 10 day: 24        
这是一个输入三个数字字符串,然后输出年月日的类
现在可能有人觉得输入三个字符串太麻烦了,就想输入一个类似这样的字符串'2022.10.24'
怎么办呢,当然是使用classmethod修饰方法

class TestClass2(object):    day = ''    month = ''    year = ''    def __init__(self, year='', month='', day=''):        self.day = day        self.month = month        self.year = year    @classmethod    def format_date(cls, str_date):        year, month, day = str_date.split('.')        new_date = cls(year, month, day)# 返回一个初始化类对象        return new_date    def out_print(self):        print('year: %s month: %s day: %s' %(self.year, self.month, self.day))ss = TestClass2.format_date('2022.10.24')ss.out_print()

输出 year: 2022 month: 10 day: 24

当然也可以使用继承的方式

class TestClass3(TestClass):    @classmethod    def format_date(cls, str_date):        year, month, day = str_date.split('.')        new_date = cls(year, month, day)        return new_datett = TestClass3.format_date('1992.9.2')tt.out_print()

输出 year: 1992 month: 9 day: 2

来源地址:https://blog.csdn.net/weixin_42575811/article/details/127452383

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯