2017-09-30 129 views
-2

這裏是我的代碼:類型錯誤:無法實例抽象類<...>與抽象方法

from abc import ABC 
from abc import abstractmethod 

class Mamifiero(ABC): 
    """docstring for Mamifiero""" 
    def __init__(self): 
     self.alimentacion = 'carnivoro' 

    @abstractmethod 
    def __respirar(self): 
     print('inhalar... exhalar') 


class Perro(Mamifiero): 
    """docstring for Perro""" 
    def __init__(self, ojos=2,): 
     self.ojos = ojos 

我想這perro.respirar()打印'inhalar... exhalar'但是當我想實例化一個類佩羅告訴我這個錯誤。我想知道我的腳本有什麼問題

+1

你認爲做了什麼?抽象方法並沒有實現它會做什麼? – user2357112

+0

你真的讀過['@ abstractmethod'](https://docs.python.org/3/library/abc.html#abc.abstractmethod)嗎? – poke

+0

抽象方法的實現並不意味着要被繼承;相反,它可以通過類似'super().__ respirar()'的方式從非抽象覆蓋中調用。 – chepner

回答

0

根據定義(讀取文檔),抽象調用是一個類,它不能被實例化,直到它沒有任何抽象方法被覆蓋。正如在設計中的面向對象編程一樣。

您有一個抽象方法Perro.__respirar()未被覆蓋,從父類繼承。或者,用方法Perro.__respirar()覆蓋它,然後在那裏做一些事情(甚至可以調用父項的方法;但是,如果它是私有的,那麼當然是雙下劃線)。

如果你想實例化Perro,只是不要使該方法抽象。使其正常。因爲它也有一些實現,這表明它是一個普通的基類的方法,而不是一個抽象的方法。

相關問題