python @classmethod @staticmethod

@classmethod隐含参数cls, 主要用在需要创建对象的情况,比如多个构造函数的情况,相当于C++重载
@staticmethod没有隐含参数,主要用在需要创建对象的情况,比如参数验证

class Date(object):

def __init__(self, day=0, month=0, year=0):
    self.day = day
    self.month = month
    self.year = year

@classmethod
def from_string(cls, date_as_string):
    day, month, year = map(int, date_as_string.split('-'))
    date1 = cls(day, month, year)
    return date1

@staticmethod
def is_date_valid(date_as_string):
    day, month, year = map(int, date_as_string.split('-'))
    return day <= 31 and month <= 12 and year <= 3999

date2 = Date.from_string('11-09-2012')
is_date = Date.is_date_valid('11-09-2012')

https://stackoverflow.com/questions/12179271/meaning-of-classmethod-and-staticmethod-for-beginner

你可能感兴趣的:(python @classmethod @staticmethod)