千锋 2019-11-30
参考https://www.cnblogs.com/Fantac/p/11481114.html
接口类和抽象类总结
在python中没有接口类,但有抽象类;abc模块中的metaclass = ABCMeta,@abstractmethod它的本质是做代码的规范用的,希望子类中能实现父类名字完全一样的方法
接口类和抽象类:
从java的角度上看是有区别的,java本来就支持单继承所以就有了抽象类;java没有多继承,所以为了接口隔离原则,设计了接口这个概念,支持多继承了
而python它既支持单继承也支持多继承,所以对于接口类和抽象类的区别就不会那么明显了,甚至在python中没有内置接口类
多态
多态指的是一类事物有多种形态
python天生支持多态
from abc import abstractmethod,ABCMeta class Payment(metaclass=ABCMeta): #支付方式类 @abstractmethod def pay(self,money): pass class Wechat(Payment): #支付方式---微信支付 def pay(self,money): print(‘已经用了微信支付了%s元‘%money) class Alipay(Payment): #支付方式---支付宝支付 def pay(self,money): print(‘已经用了支付宝支付了%s元‘%money) class Apple(Payment): #支付方式---苹果支付 def pay(self,money): print(‘已经用了支付宝支付了%s元‘%money)
多态性
就是虽然是一类东西但是它们执行的是相同的方法但是做的是不同的事,比如微信它用的是微信支付、支付宝它用的是支付宝支付、苹果支付它用的是苹果支付...
鸭子类型
python语言里面有一个鸭子类型的概念,而在某些其他的属于强类型语言,用的是多态
鸭子类型:不崇尚根据继承所得来的相似,我只是自己实现我自己的代码就可以了,如果有两个类它们刚好相似,并不产生父类的子类的兄弟关系,那这就是鸭子类型。像list、tuple这种相似,是自己写代码的时候约束的,而不是通过父类约束的