2012-03-26 61 views
1


我有一個小的Python OOP程序,其中2類Flan和Outil從超類部分繼承。
我的問題是當我打電話Flan一切正常,但是當我打電話Outil程序失敗默默。
Outil實例已創建,但缺少它不與Part共享的所有屬性。
Outil實例未添加到Outil.list_instance_outilsPart.list_instancesPython類的繼承構造函數失敗:我做錯了什麼?

class Outil(Part): 

    list_instance_outils = []  

    def __init___(self, name, part_type, nodes, elems): 
     Part.__init__(self, name, part_type, nodes, elems) 
     self.vect_norm = vectnorm(self.nodes[self.elems[0,1:]-1, 1:]) 
     self.elset = Elset(self) 
     self.nset = Nset(self, refpoint=True, generate=False) 
     self.SPOS = Ab_surface(self, self.elset) 
     self.SNEG = Ab_surface(self, self.elset, type_surf='SNEG') 
     Outil.list_instance_outils.append(self) 
     Part.list_instances.append(self) 

class Flan(Part): 

    list_instances_flans = []  

    def __init__(self, name, part_type, nodes, elems): 
     Part.__init__(self, name, part_type, nodes, elems)  
     self.vect_norm = vectnorm(self.nodes[self.elems[0,1:4]-1, 1:]) 
     self.elset = Elset(self) 
     self.nset = Nset(self) 
     self.SPOS = Ab_surface(self, self.elset) 
     self.SNEG = Ab_surface(self, self.elset, type_surf='SNEG') 
     Flan.list_instances_flans.append(self)   
     Part.list_instances.append(self) 

這兩者從類繼承部分:

class Part(): 

    list_instances = [] 

    def __init__(self, name, part_type, nodes, elems): 
     self.name = name 
     self.name_instance = self.name + '-1' 
     self.part_type = part_type 
     self.elems = elems 
     self.nodes = nodes 
     offset = np.min(self.elems[:, 1:])-1 
     self.nodes[:, 0] -= offset 
     self.elems[:, 1:] -= offset 

我不能強調不夠,我有沒有錯誤信息任何責任。 我在這裏做錯了什麼?

+1

請你可以縮進你的代碼嗎? – grifaton 2012-03-26 12:07:31

+0

是的抱歉複製粘貼失敗。 OMGG! – 2012-03-26 12:11:31

+0

OMFG!我發現我的問題...在類Outil 我寫了__init___而不是__init__ (當你看到它... 3小時..) – 2012-03-26 12:14:33

回答

7

你寫__init__尾隨下劃線,而不是兩個Outil

因此,它不會被調用 - 取而代之的是調用Part.__init__。這就是班級創建的原因,但它缺少Part以外的屬性。

1

要解決這類問題,最好的辦法是通過調試器運行代碼。

將你的課程導入python解釋器(導入,粘貼,任何你喜歡的),然後call pdbimport pdb; pdb.run('Outil()')。你現在可以通過代碼來看看發生了什麼。