# 一、接口类的作用是规范它的子类,跟后面学习的接口没关系。
from abc import abstractmethod,ABCMeta
class Pay(metaclass=ABCMeta): #metaclass是元类。
@abstractmethod
def pay(self):pass #pass意思是没代码。
#接口类:规范后面的子类,当子类没有pay方法时,抛出提示:
# Can't instantiate abstract class Apple with abstract methods pay 无法使用抽象方法pay来实例化抽象类apple,意思就是没有pay方法。
class Wechat(Pay):
def pay(self,money):
print('微信支付了%s元'%money)
class Ali(Pay):
def pay(self,money):
print('支付宝支付了%s元'%money)
class Apple(Pay):
def pppppppppppppppppppp(self,money):
print('苹果支付了%s元'%money)
def P(a,b): #统一接口,方便用户。
a.pay(b) #多态,同一类事物有多种形态。
w = Wechat()
a = Ali()
ap = Apple()
# w.pay(100)
# a.pay(200)
# ap.pay(300)
P(w,100)
P(a,200)
P(ap,200)
# 二、接口类的多继承:是面向对象的思想,符合接口类的接口隔离原则:
# 使用多个专门的接口(走路、游泳、飞分为三个专门的类),而不是使用单一的总接口(一个类有走路、游泳、飞三个方法),即客户端只需要有用的接口,不需要多余的。
# 老虎tiger 会走路、游泳
# 老鹰eagle 会走路、飞
# 天鹅swan 会走路、游泳、飞
from abc import abstractmethod,ABCMeta
class Walk(metaclass=ABCMeta):
@abstractmethod
def walk(self):pass
class Swim(metaclass=ABCMeta):
@abstractmethod
def swim(self):pass
class Fly(metaclass=ABCMeta):
@abstractmethod
def fly(self):pass
class Tiger(Walk,Swim):
def walk(self):pass
def swim(self):pass
class Eagle(Walk,Swim):
def walk(self):pass
def fly(self):pass
class Swan(Walk,Swim):
def walk(self):pass
def swim(self): pass
def fly(self):pass