微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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,last,salary):
      """Boss constructor,takes first and last names and salary"""
 
      Employee.__init__(self,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,salary,commission,quantity):
      """CommissionWorker constructor,takes first and last names,
      salary,commission and quantity"""
 
      Employee.__init__(self,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,wage,quantity):
      """PieceWorker constructor,wage
      per piece and quantity"""
 
      Employee.__init__(self,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,hours):
      """HourlyWorker constructor,
      wage per hour and hours worked"""
 
      Employee.__init__(self,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程序设计有所帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐