2010-06-16 132 views
1

說我有如下因素代碼:Python的屬性和繼承

class Class1(object): 

    def __init__(self): 
     self.my_attr = 1 
     self.my_other_attr = 2 

class Class2(Class1): 

    def __init__(self): 
     super(Class1,self).__init__() 

爲什麼不Class2中的Class1繼承的屬性?

+0

你也可以想看看這篇文章:http://fuhm.net/super-harmful/ 自從我讀,我會只是做的Class1 .__的init __(個體經營) – 2010-06-16 13:23:04

+0

@韋恩:那篇文章是誤導性的,有點皺眉(但它是一個非常有趣和有用的閱讀)。多重繼承確實是問題,'super'更像是解決方案的一部分。選擇「超級」就像說安全帶不好,因爲在事故中你仍然可能受傷。如果你使用'super',你通常會好得多。 – nikow 2010-06-16 13:27:49

+0

nikow,有沒有什麼好的解釋可以解釋爲什麼超級更好? – 2010-06-16 15:02:59

回答

10

您使用super錯誤,將其更改爲

super(Class2, self).__init__() 

基本上你告訴super以上給定的類,所以如果你給Class1那麼__init__方法不會被調用。

+0

謝謝,多數民衆贊成在 – 2010-06-16 12:42:40

+0

幫助我! – espais 2012-10-29 18:42:56

4

因爲你給super錯誤的類。它應該是:

class Class2(Class1): 

    def __init__(self): 
     super(Class2,self).__init__()