2016-03-02 105 views
-1

我有一個非常簡單的情況:調用父類的方法

我有這個類:

class animal(object): 
    def do_stuff(self): 
     return self.__yell() 

class dog(animal): 
    def yell(self): 
     print("yelling") 

我希望能夠調用

d = dog() 
d.do_stuff() 

但是我得到

AttributeError: 'dog' object has no attribute '_animal__yell'

父類將impl ement do_stuff會調用每個子類的叫喊方法,但這不起作用

+0

看到https://docs.python.org/2/library/functions.html#super –

+3

你爲什麼前綴'yell'爲'__yell'? – Kupiakos

+0

[tag:python2]或[tag:python3] ... –

回答

0

return self.__yell()更改爲return self.yell()它會起作用。按照它的名稱命名。

In [1]: class animal(object): 
    ...:  def do_stuff(self): 
    ...:   return self.yell() 
    ...: 

In [2]: class dog(animal): 
    ...:  def yell(self): 
    ...:   print("yelling") 
    ...: 

In [3]: d = dog() 

In [4]: d.do_stuff() 
yelling 
+1

實際上,將'dog.yell'重命名爲dog .__ yell'將不起作用,因爲雙引號下劃線觸發了Python的名字。這個答案的其餘部分是正確的(解決方案是不使用雙下劃線!)。 – Blckknght

+0

你說得很對,爲了好的代碼,晚上太晚了:) – olofom

0

do_stuff調用__yell(),它不存在。請將yell更改爲__yell(不要這樣做),或將__yell更改爲yell

In [24]: %paste 
class animal(object): 
    def do_stuff(self): 
     return self.yell() 


In [25]: %paste 
class dog(animal): 
    def yell(self): 
     print("yelling") 

In [26]: d = dog() 

In [27]: d.do_stuff() 
yelling