python中的继承和抽象类的实现
2011-08-05 11:31 Rollen Holt 阅读(2774) 评论(0) 编辑 收藏 举报#!/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
我喜欢程序员,他们单纯、固执、容易体会到成就感;面对压力,能够挑灯夜战不眠不休;面对困难,能够迎难而上挑战自我。他
们也会感到困惑与傍徨,但每个程序员的心中都有一个比尔盖茨或是乔布斯的梦想“用智慧开创属于自己的事业”。我想说的是,其
实我是一个程序员
==============================================================================