2012-02-16 74 views
0

爲什麼這段代碼不起作用? 我看到在調試器(PyCharm)初始化行被執行,但沒有更多。 我試圖把那裏提出異常確定,再次沒有發生。Multipple繼承和Django表格

class polo(object): 
    def __init__(self): 
     super(polo, self).__init__() 
     self.po=1  <- this code is newer executed 

class EprForm(forms.ModelForm, polo): 
    class Meta: 
     model = models.Epr 
+0

爲什麼它不工作?你得到了什麼錯誤? – Marcin 2012-02-16 16:14:49

+0

絕對沒有錯誤。該代碼根本不被執行。 – user1214179 2012-02-17 00:08:40

回答

1

您使用multiple inheritance所以一般Python會尋找在左到右的順序方法。因此,如果你的班級沒有__init__,它會在ModelFormpolo中找到它(只有找不到)。在您的代碼中,polo.__init__從不會被調用,因爲ModelForm.__init__被調用。

同時調用基類的構造函數使用明確的構造函數調用:

class EprForm(forms.ModelForm, polo): 

    def __init__(self, *args, **kwargs) 
     forms.ModelForm.__init__(self, *args, **kwargs) # Call the constructor of ModelForm 
     polo.__init__(self, *args, **kwargs) # Call the constructor of polo 

    class Meta: 
     model = models.Epr 
+0

非常感謝你。現在,當我看到你的答案時就符合邏輯。我不知道爲什麼一個假設__init__是一些特殊的方法,並且會被每個繼承類調用。 並從http://stackoverflow.com/questions/1401661/python-list-all-base-classes-in-a-hierarchy的知識,我將能夠調用所有基類的__init__函數。 偉大的工作! – user1214179 2012-02-18 12:44:22