2012-10-03 70 views
21

我創建了一個基類:如何延長Python類初始化

class Thing(): 
    def __init__(self, name): 
     self.name = name 

我要擴展類,並添加到初始化方法,所以這SubThing既有nametime財產。我該怎麼做?

class SubThing(Thing): 
    # something here to extend the init and add a "time" property 

    def __repr__(self): 
     return '<%s %s>' % (self.name, self.time) 

任何幫助都會很棒。

回答

27

你可以只在子類中定義__init__並調用super父母__init__方法適當地調用:

class SubThing(Thing): 
    def __init__(self, *args, **kwargs): 
     super(SubThing, self).__init__(*args, **kwargs) 
     self.time = datetime.now() 

確保有你的基類的子類從object不過,因爲super將不適用於舊式課程:

class Thing(object): 
    ... 
+14

而不是在'super'中引用'SubThing',你可以做'super(self .__ class__,self).__ init __(* args,** kwargs)'。這也適用於使用'type()'動態創建的類。 – miki725

+3

我得到這個錯誤與任何一種解決方案:'TypeError:必須是類型,而不是classobj' - 錯誤是由我的超級行。 – TheChymera

+1

@TheChymera看看Jesse寫了些什麼:「確保從對象中獲得基類的子類,因爲超類不能用於舊類」 – Acsisr