python继承和抽象类的实现方法


Posted in Python onJanuary 14, 2015

本文实例讲述了python继承和抽象类的实现方法。分享给大家供大家参考。

具体实现方法如下:

#!/usr/local/bin/python

# Fig 9.9: fig09_09.py

# Creating a class hierarchy with an abstract base class.

 

class Employee:

   """Abstract base class Employee"""

 

   def __init__(self, first, last):

      """Employee constructor, takes first name and last name.

      NOTE: Cannot create object of class Employee."""

 

      if self.__class__ == Employee:

         raise NotImplementedError, \

            "Cannot create object of class Employee"

 

      self.firstName = first

      self.lastName = last

 

   def __str__(self):

      """String representation of Employee"""

 

      return "%s %s" % (self.firstName, self.lastName)

 

   def _checkPositive(self, value):

      """Utility method to ensure a value is positive"""

 

      if value < 0:

         raise ValueError, \

            "Attribute value (%s) must be positive" % value

      else:

         return value

 

   def earnings(self):

      """Abstract method; derived classes must override"""

 

      raise NotImplementedError, "Cannot call abstract method"

 

class Boss(Employee):

   """Boss class, inherits from Employee"""

 

   def __init__(self, first, last, salary):

      """Boss constructor, takes first and last names and salary"""

 

      Employee.__init__(self, first, last)

      self.weeklySalary = self._checkPositive(float(salary))

 

   def earnings(self):

      """Compute the Boss's pay"""

 

      return self.weeklySalary

 

   def __str__(self):

      """String representation of Boss"""

 

      return "%17s: %s" % ("Boss", Employee.__str__(self))

 

class CommissionWorker(Employee):

   """CommissionWorker class, inherits from Employee"""

 

   def __init__(self, first, last, salary, commission, quantity):

      """CommissionWorker constructor, takes first and last names,

      salary, commission and quantity"""

 

      Employee.__init__(self, first, last)

      self.salary = self._checkPositive(float(salary))

      self.commission = self._checkPositive(float(commission))

      self.quantity = self._checkPositive(quantity)

 

   def earnings(self):

      """Compute the CommissionWorker's pay"""

 

      return self.salary + self.commission * self.quantity

 

   def __str__(self):

      """String representation of CommissionWorker"""

 

      return "%17s: %s" % ("Commission Worker",

         Employee.__str__(self))

 

class PieceWorker(Employee):

   """PieceWorker class, inherits from Employee"""

 

   def __init__(self, first, last, wage, quantity):

      """PieceWorker constructor, takes first and last names, wage

      per piece and quantity"""

 

      Employee.__init__(self, first, last)

      self.wagePerPiece = self._checkPositive(float(wage))

      self.quantity = self._checkPositive(quantity)

 

   def earnings(self):

      """Compute PieceWorker's pay"""

 

      return self.quantity * self.wagePerPiece

 

   def __str__(self):

      """String representation of PieceWorker"""

 

      return "%17s: %s" % ("Piece Worker",

         Employee.__str__(self))

 

class HourlyWorker(Employee):

   """HourlyWorker class, inherits from Employee"""

 

   def __init__(self, first, last, wage, hours):

      """HourlyWorker constructor, takes first and last names,

      wage per hour and hours worked"""

 

      Employee.__init__(self, first, last)

      self.wage = self._checkPositive(float(wage))

      self.hours = self._checkPositive(float(hours))

 

   def earnings(self):

      """Compute HourlyWorker's pay"""

 

      if self.hours <= 40:

         return self.wage * self.hours

      else:

         return 40 * self.wage + (self.hours - 40) * \

           self.wage * 1.5

 

   def __str__(self):

      """String representation of HourlyWorker"""

 

      return "%17s: %s" % ("Hourly Worker",

         Employee.__str__(self))

 

# main program

 

# create list of Employees

employees = [ Boss("John", "Smith", 800.00),

              CommissionWorker("Sue", "Jones", 200.0, 3.0, 150),

              PieceWorker("Bob", "Lewis", 2.5, 200),

              HourlyWorker("Karen", "Price", 13.75, 40) ]

 

# print Employee and compute earnings

for employee in employees:

   print "%s earned $%.2f" % (employee, employee.earnings())

输出结果如下:

Boss: John Smith earned $800.00

Commission Worker: Sue Jones earned $650.00

Piece Worker: Bob Lewis earned $500.00

Hourly Worker: Karen Price earned $550.00

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
在Django的form中使用CSS进行设计的方法
Jul 18 Python
基于Python如何使用AIML搭建聊天机器人
Jan 27 Python
PyTorch学习笔记之回归实战
May 28 Python
django进阶之cookie和session的使用示例
Aug 17 Python
简单了解python变量的作用域
Jul 30 Python
解决python 上传图片限制格式问题
Oct 30 Python
tensorflow 获取所有variable或tensor的name示例
Jan 04 Python
django有外键关系的两张表如何相互查找
Feb 10 Python
浅谈python输出列表元素的所有排列形式
Feb 26 Python
python如何将两张图片生成为全景图片
Mar 05 Python
python3注册全局热键的实现
Mar 22 Python
Keras 利用sklearn的ROC-AUC建立评价函数详解
Jun 15 Python
python列表操作实例
Jan 14 #Python
python操作gmail实例
Jan 14 #Python
Python中的装饰器用法详解
Jan 14 #Python
python登陆asp网站页面的实现代码
Jan 14 #Python
Python的面向对象思想分析
Jan 14 #Python
为python设置socket代理的方法
Jan 14 #Python
Python单例模式实例分析
Jan 14 #Python
You might like
php设计模式之命令模式使用示例
2014/03/02 PHP
php+memcache实现的网站在线人数统计代码
2014/07/04 PHP
PHP多线程之内部多线程实例分析
2015/03/09 PHP
extJs 下拉框联动实现代码
2010/04/09 Javascript
自己写的兼容ie和ff的在线文本编辑器类似ewebeditor
2012/12/12 Javascript
公共js在页面底部加载的注意事项介绍
2013/07/18 Javascript
只需一行代码,轻松实现一个在线编辑器
2013/11/12 Javascript
当达到输入长度时表单自动切换焦点
2014/04/06 Javascript
如何实现移动端浏览器不显示 pc 端的广告
2015/10/15 Javascript
JS中解决谷歌浏览器记住密码输入框颜色改变功能
2017/02/13 Javascript
微信JS-SDK选取手机照片上传功能
2017/04/21 Javascript
xmlplus组件设计系列之文本框(TextBox)(3)
2017/05/03 Javascript
javascript实现延时显示提示框效果
2017/06/01 Javascript
webpack 2.x配置reactjs基本开发环境详解
2017/08/08 Javascript
微信小程序模板和模块化用法实例分析
2017/11/28 Javascript
微信小程序使用canvas的画图操作示例
2019/01/18 Javascript
在Vue项目中,防止页面被缩放和放大示例
2019/10/28 Javascript
Node.js+Vue脚手架环境搭建的方法步骤
2020/03/08 Javascript
[05:06]DOTA2-DPC中国联赛 正赛 VG vs Magma选手采访
2021/03/11 DOTA
Python抽象类的新写法
2015/06/18 Python
解决Python3.5+OpenCV3.2读取图像的问题
2018/12/05 Python
pytorch索引查找 index_select的例子
2019/08/18 Python
Python使用QQ邮箱发送邮件报错smtplib.SMTPAuthenticationError
2019/12/20 Python
python框架Django实战商城项目之工程搭建过程图文详解
2020/03/09 Python
Python自定义聚合函数merge与transform区别详解
2020/05/26 Python
python进行OpenCV实战之画图(直线、矩形、圆形)
2020/08/27 Python
PyCharm Community安装与配置的详细教程
2020/11/24 Python
python实现无边框进度条的实例代码
2020/12/30 Python
HTML5 window/iframe跨域传递消息 API介绍
2013/08/26 HTML / CSS
南非最大的花卉和送礼服务:NetFlorist
2017/09/13 全球购物
Python的两道面试题
2013/06/29 面试题
新教师岗前培训方案
2014/06/05 职场文书
授权委托书怎么写
2014/09/25 职场文书
市场营销计划书
2015/01/17 职场文书
爱国教育主题班会
2015/08/14 职场文书
Windows Server 2016 配置 IIS 的详细步骤
2022/04/28 Servers