2012-01-01 255 views
2

新年快樂!Python類繼承

我是Python新手,一直在嘗試使用類繼承。我創建了下面的代碼並有幾個問題 -

  1. 爲什麼shDate3的類型爲numpy.datetime64而不是SHDate3? shDate似乎是SHDate類型,這是我期待的行爲。
  2. 爲什麼不能創建shDate2?我收到「'一個整數是必需的'」錯誤...

非常感謝!

from datetime import * 
from numpy import * 

class SHDate(date): 
    def __init__(self, year, month, day): 
     date.__init__(self, year, month, day) 

class SHDate2(date): 
    def __init__(self, dateString): 
     timeStruct = strptime(dateString, "%Y-%m-%d") 
     date.__init__(self, timeStruct.tm_year, timeStruct.tm_mon, timeStruct.tm_mday) 

class SHDate3(datetime64): 
    def __init__(self, dateString): 
     super(SHDate3, self).__init__(dateString) 

if __name__ == '__main__': 
    shDate = SHDate(2010,1,31) 
    print type(shDate) 

    shDate3 = SHDate3("2011-10-11") 
    print shDate3 
    print type(shDate3) 

    shDate2 = SHDate2("2011-10-11") 
    print shDate2 

回答

2

快速解答:

  1. 確保你知道當你應該使用typeisinstance,它們是不同的。你可能想看看這個question,它澄清了typeisinstance的用法。
  2. 您不應該使用__init__來定製您的date類,因爲它是不可變的類。這question提供了一些關於定製這些類的實例的討論。