先解析下这脚本干啥的:
就是有个类叫Data_test,然后实例化i = Data_test('2016','1','1')它能把结果按格式输出出来,打印年月日,但偏偏有的人比较贱,非要往里传一个"2016-1-1"这样的字符串,我们的类该怎么办呢。
class Data_test(object):
day=0
month=0
year=0
forclass = 250
def __init__(self,year=0,month=0,day=0):
self.day=day
self.month=month
self.year=year
@classmethod
def get_date_class(cls,data_as_string): # 可以传参,cls即为类自身
year,month,day=map(int,data_as_string.split('-'))
return cls(year,month,cls.forclass) # 因为类方法可以传参一个cls参数,所以可以调用类的相关信息,而静态方法只是一个独立的函数,恰巧放在了类里,他跟这个类有关系(逻辑上的关系,比如是为此类服务的,但无实质的交互),与类中的其他方法或属性无交互。这里边传递了一个类属性250
@staticmethod
def get_date_static(data_as_string): # 不能传递和类或实例相关的参数,如cls或self,但可以传递其他参数
year,month,day=map(int,data_as_string.split('-'))
return Data_test(year,month,day)
def out_date(self): # 最常见的实例方法
print "year :"
print self.year
print "month :"
print self.month
print "day :"
print self.day
# 类方法和静态方法调用方式一致,类名.方法名(参数),注意类名后边没有()
# 如果有括号相当于i=Data_test()实例化之后,再调用类方法i.get_date_class(),这样就多创建了一个对象i,虽然结果一致,但意义不同了。
# 另外再多说一句,如果i=Data_test(),之后直接去调用i()(对象名+括号),会自动调用类中的def __call__(self):方法,如果没定义就会报错,这里扯远了,和本文无关
c=Data_test.get_date_class("2015-5-5")
c.out_date()
s=Data_test.get_date_static("2016-6-6")
s.out_date()