2012-03-26 6 views
1


Ich habe ein kleines Python-OOP-Programm, in dem 2 Klassen, Flan und Outil von einem Oberklasse-Teil erben.
Mein Problem ist, wenn ich Flan anrufen funktioniert alles perfekt, aber wenn ich Outil aufrufen, schlägt das Programm still.
Die Outil Instanz wird erstellt, aber es fehlen alle Attribute, die sie nicht mit Part teilt.
Die Outil Instanz wird nicht zu Outil.list_instance_outils, noch zu Part.list_instances hinzugefügt.Python Klassenvererbung Konstruktor fehlgeschlagen: Was mache ich falsch?

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) 

Sowohl diese erben Klassen aus Teil:

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 

Ich kann nicht genug betonen, dass ich überhaupt keine Fehlermeldung haben. Was mache ich hier falsch?

+1

Können Sie Ihren Code richtig einrücken? – grifaton

+0

Ja sorry Kopieren einfügen fehlgeschlagen. –

+0

OMFG! Ich fand mein Problem ... in Klasse Outil Ich schrieb __init___ anstelle von __init__ (wenn Sie es sehen ... 3 Stunden ..) –

Antwort

7

Sie schrieb __init__ mit drei nachlauf statt zwei in Outil unterstreicht.

Aus diesem Grund wird es nicht aufgerufen - Part.__init__ wird stattdessen aufgerufen. Deshalb ist die Klasse erstellt, aber es fehlen die Attribute jenseits dessen, was in Part ist.

1

Um diese Art von Problem zu lösen, ist es am besten, den Code über den Debugger auszuführen.

Holen Sie Ihre Klassen in den Python-Interpreter (importieren, einfügen, was auch immer Sie mögen), dann call pdb: import pdb; pdb.run('Outil()'). Sie können jetzt durch den Code gehen, um zu sehen, was passiert.