2017-09-30 127 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,只是不要使该方法抽象。使其正常。因为它也有一些实现,这表明它是一个普通的基类的方法,而不是一个抽象的方法。

相关问题