写法一:

class Payment:
def pay(self, money):
raise NotImplementedError class Alipay(Payment):
def pay(self, money):
print('支付宝支付{}元。'.format(money)) class Yunpay(Payment):
def pay(self, money):
print('云支付{}元。'.format(money)) class Mypay(Payment):
def zhifu(self, money):
print('我的支付{}元。'.format(money)) def payx(payment, money):
payment.pay(money) payx(Mypay(), 90)

  由于Mypay类并未实现pay方法,所以上述代码会报错: NotImplementedError

这就起到了限制作用。

但是这种写法如果不去调用Mypay.pay就不会报错。

第二种写法:

from abc import ABCMeta, abstractmethod

class Payment(metaclass=ABCMeta):
@abstractmethod
def pay(self, money):
pass class Alipay(Payment):
def pay(self, money):
print('支付宝支付{}元。'.format(money)) class Yunpay(Payment):
def pay(self, money):
print('云支付{}元。'.format(money)) class Mypay(Payment):
def zhifu(self, money):
print('我的支付{}元。'.format(money)) def payx(payment, money):
payment.pay(money) payx(Mypay(), 90)

  报错:TypeError: Can't instantiate abstract class Mypay with abstract methods pay

同样起到了限制作用,而这种写法只要调用Mypay就会报错。

最新文章

  1. 2016年中国大学生程序设计竞赛(合肥)-重现赛1001 HDU 5961
  2. date时间函数
  3. HoloLens开发手记 - Unity development overview 使用Unity开发概述
  4. jquery 解析数据库中的json日期为正常的格式
  5. 【C++】array初始化0
  6. 【JAVA、C++】LeetCode 021 Merge Two Sorted Lists
  7. TI CC2541的中断优先级设置.
  8. 最大流问题Ford-Fulkerson方法(转)
  9. Linux-0.00运行环境搭建【转】
  10. C++编程对缓冲区的理解
  11. VBScript: Windows脚本宿主介绍
  12. 理解 Android 本地数据存储 API
  13. C#学习笔记(4)
  14. Asp.net MVC4.0(net4.5) 部署到window server 2003上的解决方案
  15. jQuery选择器的分类
  16. 小程序组件之picker和range-key的用法
  17. Uva - 400 - Unix ls
  18. Python二级-----------程序冲刺5
  19. numpy学习笔记(三)
  20. Maven CXF wsdl2Java String生成JAXBElement<Xxx> 解决方法

热门文章

  1. SpringMvc中@ModelAttribute注解的使用
  2. 哈理工OJ 1328
  3. CF 920
  4. C#如何弹出输入框
  5. 201621123005《Java程序设计》第九次实验总结
  6. instancetype 与id
  7. 福大软工 · 第十一次作业 - Alpha 事后诸葛亮
  8. jsp如何判断mysql数据库中是否已经存在添加的某条记录的方法
  9. 回首C语言关键字(~回首向来萧瑟处~)
  10. layui table 数据表格 隐藏列