这是我的代码:
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'
,但是当我想要实例化Perro类时,请显示此错误。我想知道我的脚本有什么问题
答案 0 :(得分:1)
根据定义(读取文档),抽象调用是一个不能实例化的类,直到它有任何未被覆盖的抽象方法。因此,在面向对象的设计编程中。
您有一个不会被覆盖的抽象方法Perro.__respirar()
,它继承自父类。或者,使用方法Perro.__respirar()
覆盖它,并在那里做一些事情(甚至可能调用父方法;但是当它是私有的双下划线时,当然不会。)
如果要实例化Perro
,请不要将该方法抽象化。让它正常。因为它也有一些实现,这表明它是一种普通的基类方法,而不是抽象方法。