【ps: 最近遇到的@classmethod比较多,故温故下其用法,一篇例子足以了解】
功能:讲解 @classmethod的使用
1、类中创建一个成员函数,用@classmethod装饰,作用类似静态类,但不一样的是可传递类参数;
2、调用方法:先用函数对字符串进行处理,再使用Date_test2类的构造函数初始化;
3、好处是:重构类时,不必修改构造函数,只需额外添加要处理的函数即可,然后使用装饰符@classmethod
@classmethod机制,可用一种与构造器相仿的方式来构造类的对象
# -*- coding: utf-8 -*-
'''
@Time : 2023/6/12 11:36
@Author : Celeste
@File : classmethod_.py
'''
class Date_test2(object):
day = 0
month = 0
year = 0
def __init__(self, year=0, month=0, day=0):
self.day = day
self.month = month
self.year = year
@classmethod
def get_date(cls, string_date):
# 这里第一个参数是cls,表示调用当前的类名
year, month, day = map(int, string_date.split('-'))
date1 = cls(year, month, day)
# 返回的是一个初始化后的类
return date1
def out_date(self):
print("year :", self.year)
print("month :", self.month)
print("day :", self.day)
t = Date_test2(2020,3,6)
t.out_date()
r = Date_test2.get_date("2023-6-12")
r.out_date()
本场景可看到的好处:
1、将处理的函数统一放入类中,使代码更加简洁
2、可以同时支持两种输入格式。
a:“2019,10,26”,
b:“2019-10-26”
3、使代码更加容易维护
类方法与静态方法@staticmethod的区别及使用场景:
一般情况下,我们的类方法,和静态方法多出现在工具类中,也就是不需要创建对象就可以调用的方法。
类方法:在方法中只使用类属性和类方法时,我们使用类方法。
静态方法:当方法中,既不是用类的属性和方法,也不适用实例的属性和方法时,我们使用静态方法。
类方法的应用范围比静态方法的使用场景要多一些,如果实在拿不定注意,就先写类方法, 如果发现cls参数并没有被使用,那么我们就可以切换为静态方法了。