2015-12-28 32 views
1

我正試圖使一組函數能夠通過一些數據輕鬆操作。 我面臨的問題是:它似乎識別和使用父類的方法,除了一個:show(),給我錯誤約意外的論據派生類不能識別來自父類的方法的參數

這裏的類的一個示例:

from treelib import Tree, Node 

class Join(Tree): 

    def __init__(self, id, desc, childs=(), *args, **kwargs): 

     Tree.__init__(self, *args, **kwargs) 

     self.id = id 
     self.desc = desc 
     self.value = None 
     self.parent = None 
     self.childs = None 

     self.create_node(tag=desc, identifier=id) 

     for i in childs: 
      self.paste(self.id, i) 

    def getSons(self): 
     sons = self.children(self.id) 
     return sons 

    def getID(self): 
     return self.id 

    def getDesc(self): 
     return self.desc 

    def show(self): 
     self.show(key=lambda x: x.tag, reverse=True, line_type='ascii-em') 

class Get(Tree): 

    def __init__(self, id, desc, primitive, *args, **kwargs): 

     Tree.__init__(self, *args, **kwargs) 

     self.id = id 
     self.desc = desc 
     self.parent = None 
     self.primitive = primitive 

     self.create_node(tag=desc, identifier=id, data=primitive) 

    def getID(self): 
     return self.id 

    def getDesc(self): 
     return self.desc 

    def show(self): 
     self.show(key=lambda x: x.tag, reverse=True, line_type='ascii-em') 

class Primitive(): 

    def __init__(self, value): 
     self.value = value 

    def getValue(self): 
     return self.value 

    def show(self): 
     pass 
     #print '\t -> ' + str(self.value) 

如果,例如,我做這在其他的.py

prim = Primitive(0) 
get1 = Get("get1", "Some random thing", prim) 
get1.show() 

它告訴我,key是一個意外的說法。我甚至查庫的.py文件,該說法有:

def show(self, nid=None, level=ROOT, idhidden=True, filter=None, 
     key=None, reverse=False, line_type='ascii-ex'): 

create_node()方法工作得很好!這是奇怪的。有什麼建議麼?

我在使用treelib的Python 2.7

+0

'樹.__ init __(self,* args,** kwargs)'應該是'super(Join,self).__ init __(* args,** kwarg s)' – karthikr

+0

之前嘗試過,結果相同。有和沒有'自己'... – edwardffs

+0

另外,超級調用應該是所有的邏輯(init方法的最後一行) – karthikr

回答

1

你的方法show()自稱:

def show(self): 
    self.show(key=lambda x: x.tag, reverse=True, line_type='ascii-em') 

Get刪除,並在Join更改爲:

def show(self): 
    super(Join, self).show(key=lambda x: x.tag, reverse=True, line_type='ascii-em') 
+0

我從來沒有想過它會衝突方法的名稱,因爲它們來自不同的.py文件。只需將名稱更改爲** def showPrint(self):**就可以了。非常感謝! – edwardffs

+0

'樹的來源不是此代碼的一部分。你有沒有在'Join.show'中改變它?如果是這樣的話,'super'應該是'super(Join,self)',而不是'super(Tree,self)'。 – ShadowRanger

+0

@ShadowRanger是的,謝謝你的提示。固定。在長碼上下滾動時混合起來。 –