classmethod 修饰符对应的函数不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的 cls 参数,可以来调用类的属性,类的方法,实例化对象等。
class A(object):
bar = 1
def func1(self):
print('foo')
@classmethod
def func2(cls):
print('func2')
print(cls.bar)
cls().func1()
A.func2()
class Date_test(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,data_as_string):
year,month,day = map(int,data_as_string.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_test.get_date('2018-7-6')
t.out_date()
t1 = Date_test(2018)
t1.out_date()
输出:
year : 2018
month : 7
day : 6
year : 2018
month : 0
day : 0
这样子使用的好处是:重构类的时候不需要修改构造函数,只需要添加函数方法,然后添加@classmethod 修饰符