2016-12-01 1 views
-1

Der folgende Code zum Einrichten __str__ Funktion mit einer geerbten Klasse schlägt fehl, es sei denn, es gibt eine "Linie" zwischen Selbst und dem ersten Attribut, dh wenn die Zeile junk = 99, ist das Programm BombenPython __str__ in geerbter Klasse

auskommentiert
class TemplateBlock(object) : 

    def __init__(self,        
       tidno  = 1):     
     self.tidno   = tidno    

    def __str__(self) : 
     return '%.2d:' % (self.tidno) 

class Block(TemplateBlock) : 

    def __init__(self,        
       junk  = 99,     
       bidno  = 3) : 
     TemplateBlock.__init__(self)        
     #self.junk   = junk   
     self.bidno   = bidno 

    def __str__(self) : 
     return TemplateBlock.__str__(self) + '\n%.2d' %(self.bidno) 

    def set(self,t) :        
     self.tidno   = t.tidno    

tb = TemplateBlock(tidno=2) 
b = Block(tb) 
b.set(tb) 
print(b) 

Wir danken Ihnen im Voraus für Ihre Hilfe.

+0

Können Sie das Traceback in Ihre Frage aufnehmen? Bomben zu sagen ist nicht beschreibend genug. –

+0

Bomben Bedeutung? Bitte geben Sie die Ausnahme und die Rückverfolgung an, die Sie sehen. – ShadowRanger

+0

Randbemerkung: Sie übergeben 'tb' an' Block', was keinen Sinn ergibt; es wird zum 'junk'- oder' bidno'-Argument, von denen keines ein 'TemplateBlock' sein sollte. Und Ihr Superklasseninitialisierungsaufruf übergibt keinen Wert für "tidno", was diesen albernen '.set (tb)' Aufruf erfordert, wenn Sie die Unterklasse zum Akzeptieren definieren und 'tidno' richtig übergeben könnten. – ShadowRanger

Antwort

0

Block (td) setzt die self.bidno auf td, das ist ein TemplateBlock. Von dort vermute ich, dass '\ n% .2d'% (self.bidno) eine Ausnahme auslöst, weil bidno keine Zahl ist.

Verwandte Themen