定義一個(gè)時(shí)間類:
class Data_test(object):
def __init__(self, year=0, month=0, day=0):
self.day=day
self.month=month
self.year=year
def out_date(self):
print("year:", self.year)
print("month:", self.month)
print("day:", self.day)
我們可以先實(shí)例化一個(gè) Data_test
對(duì)象卒茬,然后再調(diào)用 out_date()
方法:
>>> r = Data_test("2017-1-1")
>>> r.out_date()
year: 2017-1-1
month: 0
day: 0
假設(shè)有一種場(chǎng)景岔乔,用戶輸入的是字符串 "2017-1-1"
酥筝,我們需要改動(dòng) out_date()
函數(shù),讓它具有分割處理字符串的功能雏门,才能實(shí)現(xiàn)我們的需求嘿歌。
如果我們不想改動(dòng) out_date()
函數(shù)呢,解決辦法是用 @classmethod
(類方法)來(lái)給類增加一個(gè)處理字符串的函數(shù)茁影。
class Data_test(object):
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):
"""
輸入一個(gè)字符串作為參數(shù)宙帝,根據(jù)該字符串得到 year, month, day 的值
根據(jù)這些值實(shí)例化一個(gè) Data_test 對(duì)象,并返回
這里第一個(gè)參數(shù)是cls募闲, 表示調(diào)用當(dāng)前的類名
"""
year, month, day = map(int, data_as_string.split('-'))
# 實(shí)例化一個(gè) Data_test 對(duì)象
date = cls(year, month, day)
#返回的是一個(gè)實(shí)例化后的類
return date
def out_date(self):
print("year:", self.year)
print("month:", self.month)
print("day:", self.day)
測(cè)試:
>>> r = Data_test.get_date("2017-1-1")
>>> r.out_date()
year: 2017
month: 1
day: 1
調(diào)用類方法的格式是:類名.類方法()
步脓,不需要先實(shí)例化。
如果用 靜態(tài)方法 @staticmethod
怎么實(shí)現(xiàn)呢浩螺?
class Data_test(object):
def __init__(self, year=0, month=0, day=0):
self.day=day
self.month=month
self.year=year
# 與類方法的區(qū)別在于靴患,靜態(tài)方法不需要 cls 參數(shù)
@staticmethod
def get_date_static(data_as_string):
year, month, day = map(int, data_as_string.split('-'))
return year, month, day
def out_date(self):
print("year:", self.year)
print("month:", self.month)
print("day:", self.day)
調(diào)用靜態(tài)方法的格式是同樣是:類名.類方法()
,不需要先實(shí)例化要出。
>>> d = Data_test.get_date_static("2017-1-1")
>>> r = Data_test(*d)
>>> r.out_date()
year: 2017
month: 1
day: 1