python多态和规范
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, ABCMeta
class Payment(metaclass=ABCMeta): # 元类 默认的元类 type
@abstractmethod
def pay(self, money): pass # 没有实现这个方法
接口隔离原则

接口类在python中不存在,只是一种规范,python中自带多继承所以我们直接用class来实现接口类
抽象类

多态
多态指的是一类事物有多种形态
动物有多种形态:人,狗猪
import abc
class Animal(metaclass=abc.ABCMeta): #同一类事物:动物
@abc.abstractmethod
def talk(self):
pass
class 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')
鸭子类型

浙公网安备 33010602011771号