接口和抽象的作用:用来规范子类的撰写。
from abc import abstractclassmethod,ABCMeta ''' #接口类:默认多继承,接口类中所有的方法都必须不实现。是从JAVA中演化过来的。如果你非要在方法里面写也是可以的,只是一般不建议写。 #抽象类:不支持多继承,抽象类中方法可以有一些代码的实现 ,也是从JAVA中有的概念。如果你不能理解这两种类,你就理解成一种。他们的作用就是为了规范子类 ''' class payment(metaclass=ABCMeta): @abstractclassmethod def pay(self,money): pass class Apliba(payment): def pay(self,money): print('用支付宝支付的%s'%money) class WeiXin(payment): def pay(self,money): print('用微信支付的%s'%money) class appleZhifu(payment): def zhifu(self,money): print('用苹果支付的%s'%money) def pay(pay_obj,money): pay_obj.pay(money) pay(WeiXin(),100) pay(appleZhifu(),100)
执行结果:
"D:\Program Files\Python\python.exe" F:/Users/Administrator/PycharmProjects/SchoolManagerSys/core/Study.py Traceback (most recent call last): 用微信支付的100 File "F:/Users/Administrator/PycharmProjects/SchoolManagerSys/core/Study.py", line 28, in <module> pay(appleZhifu(),100) TypeError: Can't instantiate abstract class appleZhifu with abstract methods pay Process finished with exit code 1
这里的TypeError: Can't instantiate abstract class appleZhifu with abstract methods pay。可以直观地看出来本应该写pay方法的,但程序员错写成了appleZhifu。