python规范(接口类)
接口类可以规范代码,但接口类本身是不实现的
class Payment: def pay(self,money): raise Notlmplemented class Wechat(Payment): def pay(self, money): print('已经用微信支付了%s元' % money)class Alipay(Payment): def pay(self, money): print('已经用支付宝支付了%s元' % money)class Applepay(Payment): def fuqian(self, money): print('已经用applepay支付了%s元' % money)def pay(pay_obj, money): # 统一支付入口 pay_obj.pay(money) wechat = Wechat()ali = Alipay()app = Applepay()pay(ali,200)pay(app,200)
运行后如下
app = Applepay()TypeError: Can't instantiate abstract class Applepay with abstract methods pay
以下是接口类的另一种写法
from abc import abstractmethod, ABCMetaclass Payment(metaclass=ABCMeta): # 元类 默认的元类 type @abstractmethod def pay(self, money): pass # 没有实现这个方法
接口隔离原则
接口类在python中不存在,只是一种规范,python中自带多继承所以我们直接用class来实现接口类
抽象类
多态
多态指的是一类事物有多种形态
动物有多种形态:人,狗猪
import abcclass Animal(metaclass=abc.ABCMeta): #同一类事物:动物 @abc.abstractmethod def talk(self): passclass People(Animal): #动物的形态之一:人 def talk(self): print('say hello')class Dog(Animal): #动物的形态之二:狗 def talk(self): print('say wangwang')class Pig(Animal): #动物的形态之三:猪 def talk(self): print('say aoao')
鸭子类型