抽象基类可以使用非抽象方法。在面向对象编程中,抽象基类是一种特殊的类,它不能被实例化,只能被继承。抽象基类通常包含一个或多个抽象方法,这些方法没有实现,需要被子类实现。然而,抽象基类也可以包含非抽象方法,这些方法可以提供通用的实现,子类可以直接使用或重写。
例如,假设我们有一个抽象基类Animal
,它包含一个抽象方法makeSound()
,所有的动物子类都需要实现这个方法。同时,Animal
类还可以包含一个非抽象方法eat()
,所有的动物都有吃东西的行为,因此可以提供一个通用的实现。
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def makeSound(self):
pass
def eat(self):
print("The animal is eating")
class Dog(Animal):
def makeSound(self):
print("Woof!")
class Cat(Animal):
def makeSound(self):
print("Meow!")
dog = Dog()
dog.makeSound() # 输出 "Woof!"
dog.eat() # 输出 "The animal is eating"
cat = Cat()
cat.makeSound() # 输出 "Meow!"
cat.eat() # 输出 "The animal is eating"
在上面的例子中,Animal
类是一个抽象基类,它包含一个抽象方法makeSound()
和一个非抽象方法eat()
。Dog
和Cat
类都继承了Animal
类,并实现了makeSound()
方法。当我们创建Dog
和Cat
对象并调用它们的eat()
方法时,它们都会调用Animal
类中的eat()
方法,输出相同的结果。
领取专属 10元无门槛券
手把手带您无忧上云