当前位置 博文首页 > python继承和抽象类的实现方法

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

    作者:admin 时间:2021-07-20 17:44

    本文实例讲述了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程序设计有所帮助。

    jsjbwy
    下一篇:没有了