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 相关文章推荐
python使用PyFetion来发送短信的例子
Apr 22 Python
python网络编程之TCP通信实例和socketserver框架使用例子
Apr 25 Python
浅要分析Python程序与C程序的结合使用
Apr 07 Python
python执行子进程实现进程间通信的方法
Jun 02 Python
Python语言实现获取主机名根据端口杀死进程
Mar 31 Python
Python字符串拼接、截取及替换方法总结分析
Apr 13 Python
Python中常用的内置方法
Jan 28 Python
详解pandas的外部数据导入与常用方法
May 01 Python
python图像和办公文档处理总结
May 28 Python
pytorch中torch.max和Tensor.view函数用法详解
Jan 03 Python
Python如何在循环内使用list.remove()
Jun 01 Python
python字符串拼接.join()和拆分.split()详解
Nov 23 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
动漫女神老婆无限好,但日本女生可能就不是这么一回事了!
2020/03/04 日漫
虫族 Zerg 历史背景
2020/03/14 星际争霸
PHP5 字符串处理函数大全
2010/03/23 PHP
php文件操作实例代码
2012/05/10 PHP
利用php操作memcache缓存的基础方法示例
2017/08/02 PHP
php post json参数的传递和接收处理方法
2018/05/31 PHP
jQuery中get和post方法传值测试及注意事项
2014/08/08 Javascript
jQuery表单域属性过滤器用法分析
2015/02/10 Javascript
js实现图片漂浮效果的方法
2015/03/02 Javascript
js点击列表文字对应该行显示背景颜色的实现代码
2015/08/05 Javascript
JS表单验证的代码(常用)
2016/04/08 Javascript
浅谈js中test()函数在正则中的使用
2016/08/19 Javascript
JS实现焦点图轮播效果的方法详解
2016/12/19 Javascript
JavaScript中的工厂函数(推荐)
2017/03/08 Javascript
vue实现登陆登出的实现示例
2017/09/15 Javascript
解决vue单页使用keep-alive页面返回不刷新的问题
2018/03/13 Javascript
Node.js笔记之process模块解读
2018/05/31 Javascript
手把手带你封装一个vue component第三方库
2019/02/14 Javascript
纯异步nodejs文件夹(目录)复制功能
2019/09/03 NodeJs
Python导出DBF文件到Excel的方法
2015/07/25 Python
LRUCache的实现原理及利用python实现的方法
2017/11/21 Python
matplotlib savefig 保存图片大小的实例
2018/05/24 Python
pandas.DataFrame选取/排除特定行的方法
2018/07/03 Python
Python 根据日志级别打印不同颜色的日志的方法示例
2019/08/08 Python
Python图片的横坐标汉字实例
2019/12/04 Python
纯CSS打造(无图像无js)的非常流行的讲话(语音)气泡效果
2012/12/28 HTML / CSS
HTML5通过调用canvas对象的getContext()方法来获取绘图环境
2014/06/23 HTML / CSS
中学清明节活动总结
2014/07/04 职场文书
高校群众路线教育实践活动剖析材料
2014/10/10 职场文书
小学重阳节活动总结
2015/03/24 职场文书
物业保安辞职信
2015/05/12 职场文书
环境卫生整治简报
2015/07/20 职场文书
敬老院活动感想
2015/08/07 职场文书
《家》读后感:万惜拯救,冷暖自知
2019/09/25 职场文书
读《儒林外史》有感:少一些功利,多一些真诚
2020/01/19 职场文书
在Java中Collection的一些常用方法总结
2021/06/13 Java/Android