python 抽象类,抽象方法,主动约束
问题:你想定义一个结构或者抽象类,来确保子类实现了某些特定的方法
解决方法一:
class BaseMsg(object): def send(self): raise NotImplemented('send() must be override') class WeChat(BaseMsg): def send(self): pass class Msg(BaseMsg): def send(self): pass class Email(BaseMsg): def send(self): pass
以上写法在python源码中较多,也是在做类型约束时比较常用的一种做法。
解决方法二:
使用abc模块,可以很轻松的定义抽象基类
from abc import ABCMeta, abstractmethod class BaseMsg(metaclass=ABCMeta): @abstractmethod def send(self, x): pass class WeChat(BaseMsg): def send(self, x): pass class Email(BaseMsg): def send(self, x): pass
抽象类的一个特点是它不能直接被实例化
抽象类的目的就是让别的类继承它并实现特定的抽象方法