2015-07-13 75 views
0

在Python中,我實現了Inheritance。
TypeError:無法綁定的方法fun1()必須用c1實例作爲第一個參數調用(取而代之)

class c1(object): 
    def __init__(self): 
     pass 
    def fun1(self): 
     print 'In Fun1' 

class c2(c1): 
    def __init__(self): 
     c1.__init__(self) 
    def fun2(self): 
     c1.fun1() 
     print 'In Fun2' 

obj = c2() 
obj.fun2() 


當我運行它,我收到以下錯誤:

Traceback (most recent call last): 
File "C:/Users/madhuras/Documents/inheritance_example.py", line 15, in <module> 
obj.fun2() 
File "C:/Users/madhuras/Documents/inheritance_example.py", line 11, in fun2 
c1.fun1() 
TypeError: unbound method fun1() must be called with c1 instance as first argument (got nothing instead) 

爲什麼會出現這個錯誤的代碼下面給出? 在此先感謝!

+0

您需要將自己傳遞給'c1.fun1()' –

回答

0

您不能使用c1.fun1()來調用c1的方法fun1,因爲它的實例方法(而不是類方法)。您可以使用super訪問fun1()(或甚至self.fun1())。 __init__()方法(儘管它目前正在工作)相同,最好也使用super()

嘗試以下 -

class c1(object): 
    def __init__(self): 
     pass 
    def fun1(self): 
     print 'In Fun1' 

class c2(c1): 
    def __init__(self): 
     super(c2, self).__init__() 
    def fun2(self): 
     super(c2, self).fun1() #you can also do self.fun1() , but explicitly asking python to call super class's fun1 maybe better 
     print 'In Fun2' 

obj = c2() 
obj.fun2() 
+1

謝謝Anand S Kumar :) –

0

的錯誤是在FUN2,你的意思是寫

self.fun1() 

也許,如果你想specifify執行的定義,

c1.fun1(self) 

,而不是

c1.fun1() 

c1是類的名稱,而不是實例的名稱。

相關問題