# 抽象类主要就是作为基类/父类,来约束子类中必须实现的某些方法 # 抽象类的特点: # 必须在类定义的时候指定metaclass = ABCMeta # 必须在要约束的方法上方加上@abstractmethod方法 from abc import ABCMeta,abstractmethod #抽象方法 class Payment(metaclass = ABCMeta): #关键字传参 metaclass = ABCMeta表示Payment类是一个规范类 @abstractmethod #@abstractmethod表示下面一行中的pay方法是一个必须在子类中实现的方法 def pay(self):pass #支付 @abstractmethod def back(self):pass #退款功能
接口类
# python
# 抽象类 : 抽象类中的方法可以写一些具体的py代码(规范)
# 单继承
# 多继承
# java
# 不支持多继承,新的概念 接口 Interface
# 和抽象类几乎一模一样的功能 :
# 只定义一个接口名字(基类名),内部定义子类必须实现的方法
# 接口支持多继承
# 接口内部的所有方法都不能写具体的代码,只能用pass代替
# 抽象类 :
# 单继承的形容,并且在单继承中可以在方法中写python代码
# 接口类 : 更接近java中的接口的概念
# python中由于有了抽象类的多继承,不需要接口的概念了
# 一个基类写出来被子类多继承了 : 接口类
# 并且在方法中只写pass(你可以选择性的满足)
多继承
python默认继承object类
# 钻石继承问题/多继承的优先级问题
# 在python3中 所有的类都是新式类,所有的新式类的继承顺序都遵循C3算法,也叫广度优先算法
# 可以使用类名.__mro__()这个方法来查看这个继承顺序
C3算法 - 钻石模型
# 每一个类的继承顺醋都是从基类向子类看