python面向对象之抽象类
一、 什么是python的抽象类
Python中的抽象类是具有以下特征的class:
- 它不是用来初始化/实例化的。
- 相反,它是用于充当其它类的父类。
- 它必须继承基抽象类 abc.ABC。
- 它必须包含至少一个抽象方法。
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() 是普通方法。 派生类可以自己实现,也可以直接访问基类的。
三、抽象类的作用和目的
抽象类的作用,就是为了保证所有的派生类,都实现了它的派生方法,这是通过语法强制保证的。
抽象基类具有以下优点:
- 处理继承问题方面更加规范、系统
- 明确调用之间的相互关系
- 使得继承层次更加清晰
- 限定子类实现的方法
总的来说,抽象类是大型工程的一种设计方法,通过语法层面,来保证类的接口和实现,保证类的封装。
属于设计模式的一类基础组件。

浙公网安备 33010602011771号