2015-07-13 3 views
0

В Python я реализую Inheritance. Код, как указано ниже:
TypeError: unbound method 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

Вы не можете вызвать метод fun1 из c1, используя 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

Спасибо Ананд С Кумар :) –

0

Ошибка в определении fun2, где вы имели в виду, чтобы написать

self.fun1() 

или, может быть, если вы хотите specifify реализацию,

c1.fun1(self) 

вместо

c1.fun1() 

c1 - это имя класса, а не экземпляра.

Смежные вопросы

 Смежные вопросы