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

yipeiwu_com5年前Python基础

本文实例讲述了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中scipy.misc.logsumexp函数的运用场景

scipy.misc.logsumexp函数的输入参数有(a, axis=None, b=None, keepdims=False, return_sign=False),具体配置可参见...

在python中将字符串转为json对象并取值的方法

如下所示: string =" { "status": "error", "messages": ["Could not find resource or operation '...

Python设计模式之观察者模式实例

关于设计模式中的观察者模式,定义如下(维基百科): 觀察者模式(有時又被稱為發布/訂閱模式)是軟體設計模式的一種。在此種模式中,一個目標物件管理所有相依於它的觀察者物件,並且在它本身的狀...

Python常见数据类型转换操作示例

本文实例讲述了Python常见数据类型转换操作。分享给大家供大家参考,具体如下: 类型转换 主要针对几种存储工具:list、tuple、dict、set 特殊之处:dict是用来存储键值...

使用Python下载歌词并嵌入歌曲文件中的实现代码

使用Python下载歌词并嵌入歌曲文件中的实现代码

使用python扫描本地音乐并下载歌词 这次这个真的是干货哦,昨晚弄了半晚上,,,,从8点吃完饭就开始写,一直到了快12点才弄好,,,新手,伤不起呀。。。。 先简单的说下吧,百度提供了一...