• 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


    ==============================================================================

    本博客已经废弃,不在维护。新博客地址:http://wenchao.ren


    我喜欢程序员,他们单纯、固执、容易体会到成就感;面对压力,能够挑灯夜战不眠不休;面对困难,能够迎难而上挑战自我。他
    们也会感到困惑与傍徨,但每个程序员的心中都有一个比尔盖茨或是乔布斯的梦想“用智慧开创属于自己的事业”。我想说的是,其
    实我是一个程序员

    ==============================================================================
  • 相关阅读:
    只知道参数名,要从对象里面获取值,可以使用反射机制获取
    mysql创建存储过程,批量建表分表00到99
    讲讲个人对于系统重构的一些心得
    浅谈线程runnable和callable的使用及区别
    springboot项目线程使用2
    springboot项目线程使用
    推荐一个算法网站
    Centos7.3安装和配置jre1.8转
    向java高级工程师和项目经理的道路进发【转】
    linux 查看日志命令
  • 原文地址:https://www.cnblogs.com/rollenholt/p/2128428.html
Copyright © 2020-2023  润新知