[Python面向对象编程] 抽象类和抽象方法

Posted by Chase Shen on 2022-01-24
Estimated Reading Time 1 Minutes
Words 443 In Total
Viewed Times

在面向对象编程中,抽象类和抽象方法提供了一种定义通用接口的方法,同时确保派生类实现特定的方法。在Python中,抽象类和抽象方法通常通过abc模块(Abstract Base Classes)来实现。

抽象类(Abstract Class)

  • 定义:抽象类是一种不能被实例化的类,它只能被继承。它通常包含一个或多个抽象方法。
  • 用途:抽象类通常作为其他类的基类使用,定义一个或多个抽象方法,这些方法必须在子类中被重写。

抽象方法(Abstract Method)

  • 定义:抽象方法是在抽象类中声明但不具体实现的方法。子类负责提供这些方法的具体实现。
  • 用途:强制要求子类实现特定的方法。

使用abc模块创建抽象类和抽象方法

  1. 导入abc模块
1
from abc import ABC, abstractmethod
  1. 定义抽象类
1
2
3
4
class AbstractClass(ABC):
@abstractmethod
def abstract_method(self):
pass
  1. 实现抽象类
1
2
3
class ConcreteClass(AbstractClass):
def abstract_method(self):
print("Implementing the abstract method")
  1. 实例化
1
2
3
4
5
6
# 实例化抽象类会导致错误
# abstract_instance = AbstractClass() # TypeError

# 实例化具体实现
concrete_instance = ConcreteClass()
concrete_instance.abstract_method() # 正常工作

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from abc import ABC, abstractmethod

class Polygon(ABC):
@abstractmethod
def no_of_sides(self):
pass

class Triangle(Polygon):
def no_of_sides(self):
print("I have 3 sides")

class Pentagon(Polygon):
def no_of_sides(self):
print("I have 5 sides")

# 创建多边形的实例
t = Triangle()
t.no_of_sides()

p = Pentagon()
p.no_of_sides()

在这个示例中,Polygon是一个抽象类,其中包含了一个抽象方法no_of_sidesTrianglePentagon类继承自Polygon并实现了no_of_sides方法。

注意事项:

  • 尝试直接实例化一个抽象类会导致TypeError。
  • 所有从抽象类继承的子类必须实现所有的抽象方法,否则它们也会变成抽象类。

如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !