抽象类和接口类做的事情:建立规范
制定一个类的metaclass是ABCMeta那么这个类就编程了一个抽象类(接口类)这个类的功能就是建立一个规范类 让它里面的规范都有一样的方法或者属性
抽象类中所有被abstractmethod装饰的方法都必须被继承的字类实现
如果不实现 那么在实例化阶段就会报错
无论是抽象类还是接口类metaclass = ABCMeta 都不可以被实例化
from abc import ABCMeta, abstractmethod class Payment(metaclass = ABCMeta): #这就是建立一个规范的类 @abstractmethod def pay(self, money): print('充值了%s元'%money) class Person(Payment): def pay(self,money): print('充值了%s元' % money) def pay(a, money): print('充值了%s元'%( money)) alex = Person() # alex.pay(1000) pay(alex,1000)
什么叫接口?
python是没有接口的概念的 那么接口是从哪儿来的概念呢?
java类是没有多继承的 接口可以实现多继承
接口类的作用:
在Java中 能够满足接口隔离原则 且完成多继承的约束、、
而在python中 满足接口隔离的原则,由于python本身支持多继承所以就不需要接口的概念了
抽象类 和接口类
在python中:
并没有什么不同 都是用来约束字类中的方法的
只要是抽象类和接口类中被abstractmethod装饰的方法都需要被字类实现
需要注意的是 当多个字类之间有相同的功能也有不同的功能的时候 应该采用多个接口类进行约束 (这个时候我感觉是定义不同的约束类 来对不同的字类进行约束)
在java中抽象类和接口类完全的不同的
抽象类的本质还是一个类 是类就必须遵循单继承的规则 所以一个字类被抽象类约束 那么它只能被一个父类控制
当多个类之间有相同的功能有不同的功能的时候 java只能用接口来解决问题
面试的时候:
抽象类:是python中定义类的一种规范
在公司写代码的 时候:
如果遇到抽象类 记得按照抽象类中的贵伐一一实现对应的方法
java多态在一个类之下发展出来的多个类的对象都可以作为参数传入这里
无论是python2还是python3天生自带多态 应为都是默认继承object类
一个对象的数据类型就是它所在的类
# 鸭子类型 # class QQpay(): # def pay(self,money): # print('使用qq支付了%s元'%money) # # class Wechatpay(): # def pay(self,money): # print('使用微信支付了%s元'%money) # # def pay(pay_obj,money): # pay_obj.pay(money)
多态和鸭子类型
# 多态 通过继承实现
# java 在一个类之下发展出来的多个类的对象都可以作为参数传入一个函数或者方法
# 在python中不需要刻意实现多态,因为python本身自带多态效果
# 鸭子类型
# 不是通过具体的继承关系来约束某些类中必须有哪些方法名
# 是通过一种约定俗成的概念来保证在多个类中相似的功能叫相同的名字