8.16 在类ä¸å®šä¹‰å¤šä¸ªæž„é€ å™¨Â¶
问题¶
ä½ æƒ³å®žçŽ°ä¸€ä¸ªç±»ï¼Œé™¤äº†ä½¿ç”¨ __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)
直接调用类方法��,下�是使用示例:
a = Date(2012, 12, 21) # Primary
b = Date.today() # Alternate
讨论¶
类方法的一个主è¦�ç”¨é€”å°±æ˜¯å®šä¹‰å¤šä¸ªæž„é€ å™¨ã€‚å®ƒæŽ¥å�—一个 class 作为第一个å�‚æ•°(cls)。
ä½ åº”è¯¥æ³¨æ„�到了这个类被用æ�¥åˆ›å»ºå¹¶è¿”回最终的实例。在继承时也能工作的很好:
class NewDate(Date):
pass
c = Date.today() # Creates an instance of Date (cls=Date)
d = NewDate.today() # Creates an instance of NewDate (cls=NewDate)