抽象类
抽象类是一种特殊类型的类,它定义了子类必须实现的方法。抽象类不能被实例化,只能被继承。
在 Python 中,我们可以通过使用 abc
模块来定义抽象类。abc
模块提供了 ABCMeta
元类,我们可以使用它来创建抽象类。
from abc import ABCMeta, abstractmethod
class Shape(metaclass=ABCMeta):
@abstractmethod
def area(self):
pass
@abstractmethod
def perimeter(self):
pass
在上面的示例中,我们定义了一个名为 Shape
的抽象类。这个抽象类定义了两个抽象方法:area()
和 `perimeter()”。抽象方法没有实现,子类必须实现这些方法。
接口
接口是一种特殊的协议,它定义了一组方法,类必须实现这些方法才能实现该接口。接口不能被实例化,只能被类实现。
在 Python 中,我们可以使用 abc
模块来定义接口。abc
模块提供了 ABC
类,我们可以使用它来创建接口。
from abc import ABC, abstractmethod
class Shape(ABC):
@abstractmethod
def area(self):
pass
@abstractmethod
def perimeter(self):
pass
在上面的示例中,我们定义了一个名为 Shape
的接口。这个接口定义了两个抽象方法:area()
和 perimeter()
。类必须实现这些方法才能实现 Shape
接口。
区别
抽象类和接口的主要区别在于,抽象类可以包含具体方法,而接口不能。具体方法是已经实现了的方法,子类可以使用这些方法。
另外,抽象类可以被继承,而接口不能被继承。接口只能被类实现。
何时使用
抽象类和接口都用于定义一组类必须实现的方法。抽象类通常用于定义类之间的层次结构,而接口通常用于定义类之间的协作关系。
例如,我们可以使用抽象类来定义一个动物类,然后使用子类来表示不同的动物,如狗、猫和鱼。这些子类将继承动物类的属性和方法,并可以实现自己的具体方法。
我们可以使用接口来定义一个图形类,然后使用类来表示不同的图形,如正方形、圆形和三角形。这些类将实现图形接口的方法,并可以实现自己的具体方法。