python面向对象之抽象类

一、 什么是python的抽象类

Python中的抽象类是具有以下特征的class:

  1. 它不是用来初始化/实例化的。
  2. 相反,它是用于充当其它类的父类。
  3. 它必须继承基抽象类 abc.ABC。
  4. 它必须包含至少一个抽象方法。

Python中的抽象类,类似于C++中的纯虚类。或者Java中的interface概念。

我们来看下面的例子:

import abc
class Animal(metaclass=abc.ABCMeta):
@abc.abstractmethod
def speak(self):
pass

Animal:
class Animal 就是一个抽象类,继承自 metaclass=abc.ABCMeta(抽象类的基类)。

speak():
speak() 是一个抽象方法,它上面的类装饰器 @abc.abstractmethod 就是用来设置它为一个抽象方法。

抽象类的书写步骤:

1、创建一个父类
2、必须导入 import abc
3、父类必须继承一个属性 class Parent(metaclass=abc.ABCMeta):
4、在想要子类中必须实现的方法上面加一个 装饰器 : @abc.abstractmethod
5、子类继承父类,子类必须重写父类中被添加 了 @abc.abstractmethod 的方法

二、 如何使用抽象类

2.1 不能直接从抽象类中生成一个实例

animal = Animal() # this will give us an error

上面的语句会报错,因为直接实例化一个抽象类了。

2.2 可以从抽象类中派生出来具体的类来使用

举例:

import abc
class Animal(metaclass=abc.ABCMeta):
@abc.abstractmethod
def speak(self):
pass
class Dog(Animal):
def speak(self):
print('woof')
class Cat(Animal):
def speak(self):
print('bird')

注意的是: 所有派生类,都需要实现抽象类中的抽象方法,在这个例子中是 speak().

2.3 抽象类中的非抽象方法

看下面这个例子:

import abc
class Animal(metaclass=abc.ABCMeta):
@abc.abstractmethod
def speak(self):
pass
def hello(self):
print('hello')
class Dog(Animal):
def speak(self):
print('woof')
dog = Dog()
dog.speak() # woof
dog.hello() # hello

上面这个例子,
speak() 是抽象方法,需要所有派生类都需要去写自己的实现的。
hello() 是普通方法。 派生类可以自己实现,也可以直接访问基类的。

三、抽象类的作用和目的

抽象类的作用,就是为了保证所有的派生类,都实现了它的派生方法,这是通过语法强制保证的。
抽象基类具有以下优点:

  1. 处理继承问题方面更加规范、系统
  2. 明确调用之间的相互关系
  3. 使得继承层次更加清晰
  4. 限定子类实现的方法

总的来说,抽象类是大型工程的一种设计方法,通过语法层面,来保证类的接口和实现,保证类的封装。
属于设计模式的一类基础组件。

posted @   Xiao0101  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
点击右上角即可分享
微信分享提示

目录