在面向对象编程中,抽象类和抽象方法提供了一种定义通用接口的方法,同时确保派生类实现特定的方法。在Python中,抽象类和抽象方法通常通过abc模块(Abstract Base Classes)来实现。
抽象类(Abstract Class)
- 定义:抽象类是一种不能被实例化的类,它只能被继承。它通常包含一个或多个抽象方法。
- 用途:抽象类通常作为其他类的基类使用,定义一个或多个抽象方法,这些方法必须在子类中被重写。
抽象方法(Abstract Method)
- 定义:抽象方法是在抽象类中声明但不具体实现的方法。子类负责提供这些方法的具体实现。
- 用途:强制要求子类实现特定的方法。
使用abc
模块创建抽象类和抽象方法
- 导入abc模块
1
| from abc import ABC, abstractmethod
|
- 定义抽象类
1 2 3 4
| class AbstractClass(ABC): @abstractmethod def abstract_method(self): pass
|
- 实现抽象类
1 2 3
| class ConcreteClass(AbstractClass): def abstract_method(self): print("Implementing the abstract method")
|
- 实例化
1 2 3 4 5 6
|
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_sides
。Triangle
和Pentagon
类继承自Polygon并实现了no_of_sides
方法。
注意事项:
- 尝试直接实例化一个抽象类会导致TypeError。
- 所有从抽象类继承的子类必须实现所有的抽象方法,否则它们也会变成抽象类。
如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !