问题
如果想让用户能够以多种方式创建实例,而不局限于__init()__方法,可以用下面的解决方案
import time
class Date:
#primary constructor
def __init__(self, year, month, day):
self.year = year
self.month = month
self.day = day
# alternate constructor
@classmethod
def today(cls):
t = time.localtime()
return cls(t.tm_year, t.tm_mon, t.tm_mday)
def __repr__(self):
return "year:%s, month:%s, day:%s" % (self.year, self.month, self.day)
def __str__(self):
return self.__repr__()
if __name__ == '__main__':
a = Date(2019, 8, 10)
b = Date.today()
print(a)
print(b)
讨论
1.类方法的一大主要用途就是定义其它可选的构造函数。
2.类方法的一个关键特性是把类作为其接收的第一个参数(cls).
3.类方法中会用到这个类来创建并返回最终的实例
4.当定义一个有着多个构造函数的类时,应该让__init()__尽可能的简单(例如做一些赋值操作外,其它什么都不做;如果需要的话,可以在其备选的构造函数中选择实现理高级的操作)