Python中的抽象方法@abstractmethod

抽象方法是父类的一个方法, 父类没有实现这个方法, 父类是不可以实例化的. 子类继承父类, 子类必须实现父类定义的抽象方法, 子类才可以被实例化. Python中的abc提供了@abstractmethod装饰器实现抽象方法的定义

抽象类的实现

Python 3.4+

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

class Foo(ABC):
@abstractmethod
def fun(self):
"""
你需要在子类中实现该方法, 子类才允许被实例化
"""


class SubFoo(Foo):

def fun(self):
print("子类实现父类的抽象方法")


if __name__ == "__main__":

sf = SubFoo()
sf.fun()

Python 3.0 - 3.3 版本

1
2
3
4
5
6
from abc import abstractmethod, ABCMeta

class Foo(metaclass=ABCMeta):
@abstractmethod
def fun(self):
pass

Python 2 版本

1
2
3
4
5
6
7
from abc import ABCMeta, abstractmethod

class FooBar():
__metaclass__ = ABCMeta
@abstractmethod
def fun(self):
pass

浅谈抽象类

类, 是从一堆对象中抽象出来的, 比如猫类,狗类,人类

抽象类, 是从一堆类中抽象出来的, 比如上面的三个类可以抽取出动物类

抽象类的特点是不能给实例化, 只能被子类继承, 由子类实现了父类的抽象方法后, 子类才能被实例化

Python中的接口, 抽象类, 抽象函数

Python中的接口是个弱概念, 从Java中的概念延伸而来, Python中通过抽象类和抽象方法来实现一个接口, 例如Python3中, class 类继承的 abc.ABC 即为抽象类, @abstractmethod 装饰器使其装饰的函数成为抽象函数

一般情况下, Python多在单继承的情况下使用抽象类