一. 接口类
接口类不能被实例化
在python里没有接口类这种数据类型,没有接口类专门的语法
但是 可以通过继承abc模块实现接口的功能
from abc importABCMeta,abstractmethodclass Payment(metaclass=ABCMeta): #接口类
@abstractmethoddefpay(self,money):pass
class Wechatpay(Payment): #根据接口类的规范编程
defpay(self,money):print('微信支付了%s元'%money)
p=Wechatpay()
p.pay(6)
二. 接口隔离原则
from abc importABCMeta,abstractmethodclass FlyAnimal(metaclass=ABCMeta):
@abstractmethoddeffly(self):print(11111)class SwimAnimal(metaclass=ABCMeta):
@abstractmethoddef swim(self): pass
class WalkAnimal(metaclass=ABCMeta):
@abstractmethoddef walk(self): pass
classSwan(SwimAnimal,WalkAnimal,FlyAnimal):#飞
def fly(self):pass
#游泳
def swim(self):pass
#走
def walk(self):pass
classQq(SwimAnimal,WalkAnimal):def swim(self):pass
#走
def walk(self):pass
classBird(FlyAnimal,WalkAnimal):#飞
def fly(self):pass
#走
def walk(self):passSwan()
接口隔离原则
三. 抽象类
抽象类 规范一个类的类
在python里 抽象类和接口类 没区别
在java里 有区别
java的接口规定里面的方法一定不能实现(一句代码也不能写)
抽象类 单继承
无论接口类 还是抽象类 其实都是一种面向对象编程的开发规范
只是在接口类或者抽象类中 去约束继承它的子类必须实现某些方法
对于java代码来说:如果发生多继承(类似上面接口隔离原则) 那么一定是接口类 且里面的方法都不能实现
如果在方法里有了实现 那么一定是单继承 的抽象类
但是对于python来说 就没有这些约束
因为python没有接口的概念
对于类的继承 没有多继承的限制
实际上abc模块是帮我实现抽象类的方法,只是我们用它来模仿接口类的效果了
在python中,只要metaclass = ABCMeta 定义了抽象方法(@abctractmethod)
这个类就不能被实例化
你可以说他是一个抽象类
四. 多态
python是自带多态的
例如:上面的接口隔离原则就是多态
python崇尚鸭子类型
如:字符串,列表,元组,都是序列类型,但他们直接没有直接的继承关系
classList:defindex(self):pass
defslice(self):pass
deflen(self):pass
defappend(self):pass
classTuple:defindex(self):pass
defslice(self):pass
deflen(self):pass
classStr:defindex(self):pass
defslice(self):pass
deflen(self):pass
defsplit(self):pass
鸭子类型