2016-02-01 25 views
4

我想從另一個python腳本中繼承一個類。Python:未綁定的方法__init __()from import.class

我從同一個文件中進行子類化時,我已經完成了以下工作。

widge.py 
    class widget(object): 
     def __init__(self,bob): 
      #do something 

    class evenWidgetier(widget): 
     def __init__(self, bob): 
      widget.__init__(self,bob) 
      #do something 

但是,一旦我在繼承中添加從另一個文件..

superWidget.py 

    import widge 
    class superWidgety(widge.evenWidgetier): 
     def __init__(self, bob): 
      widge.widget.__init__(self,bob) 
      #do something 

我得到一個錯誤:

unbound method __init__() must be called with widget instance as first argument 

有沒有一種方法,我可以從另一個包繼承一個類,作品?

出於好奇,這是怎麼回事? 實質上,這看起來和我完全相同。我可以通過使用widge.widget()從另一個文件中調用一個類,以便該方法似乎已經建立。通過引用聲明中的類,我可以在類處於同一個文件中時進行子類化。在一個聲明中使用一個導入類中的類是什麼?爲什麼它在同一個文件中將自己視爲正確的方法,但在導入時將自身視爲未綁定的方法?

的特別,我的代碼是這樣的(剝離部分應該不會影響這一點。

Attributor.py 
    class Tracker(object): 
     def __init__(self, nodeName=None, dag=None): 
      #Tracking stuff 

    class Transform(Tracker): 
     #Does stuff with inherited class 

timeline_tab.py 
    import Attributor as attr 

    class timeline(attr.Transform): 
     #some vars 
     def __init__(self, nodeName=None): 
      attr.Transform.__init__(self,nodeName=nodeName) 
      #Additional init stuff, but doesn't happen because error on previous line 
+0

請告訴我們的代碼,你初始化類... – matino

+8

我無法重現您爲您編寫的最小示例給出的錯誤消息。 – jofel

+0

您確定子類實際上是您的實際代碼中的子類嗎?錯誤消息是建議'self'不是父類的一個實例,如果繼承正常工作,它應該是這樣。 – Blckknght

回答

1

superWidget.py變化SuperWidget使用super

import widge 
    class superWidgety(widge.evenWidgetier): 
     def __init__(self, bob): 
      super(SuperWidget,self).__init__(bob) 
      #do something 
相關問題