class Date:
#构造函数
def __init__(self, year, month, day):
self.year = year
self.month = month
self.day = day
def tomorrow(self):
self.day += 1
def __str__(self):
return "{year}/{month}/{day}".format(year=self.year, month=self.month, day=self.day)
if __name__ == "__main__":
new_day = Date(2018, 12, 31)
new_day.tomorrow()
print(new_day)
Date(2018, 12, 31)里面的这三个参数分别对应 初始化里面的__init__(self, year, month, day)三个值。
self则代表他实例的本身。new_day.tomorrow()在调用该方法时,python会自动把new_day这个实例放入括号内。例如tomorrow(new_day)
静态方法
class Date:
#构造函数
def __init__(self, year, month, day):
self.year = year
self.month = month
self.day = day
@staticmethod
def parse_from_string(date_str):
year, month, day = tuple(date_str.split("-"))
return Date(int(year), int(month), int(day))
date_str = "2018-12-31"
new_day = Date.parse_from_string(date_str)
静态方法有一个坏处,就是会出现硬编码的现象。比如说我们要修改类名Date改为NewDate,那么就要在return的时候改成return NewDate(int(year), int(month), int(day))
类方法
采用类方法就不会出现前面的硬编码的问题,from_string(cls, date_str)里面cls就是指代的我们的类名Date。在python中会直接将类的名字用cls传递出来。
@classmethod
def from_string(cls, date_str):
year, month, day = tuple(date_str.split("-"))
return cls(int(year), int(month), int(day)
new_day = Date.from_string(date_str)
print(new_day)
下面是判断日期的有效性
@staticmethod
def valid_str(date_str):
year, month, day = tuple(date_str.split("-"))
if int(year)>0 and (int(month) >0 and int(month)<=12) and (int(day) >0 and int(day)<=31):
return True
else:
return False