python中的继承和抽象类的实现
2011-08-05 11:31
585 查看
#!/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继承和抽象类的实现方法
- Python 实现抽象类的两种方式+邮件提醒+动态导入模块+反射(参考Django中间件源码)
- Java 抽象类 接口 继承 实现
- python基础----继承与派生、组合、接口与归一化设计、抽象类、子类中调用父类方法
- 已知一个抽象类Shapge,该类中有一个方法GetArea。 要求定义一个Rectangle类,继承Shape类,实现GetArea方法计算矩形面积。
- 接口是否可继承接口? 抽象类是否可实现(implements)接口?
- 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类
- 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?
- Python 继承、派生、组合、接口、抽象类
- 抽象类,接口继承与实现关系
- 在Flex/ActionScript3中实现抽象类及继承机制解密
- Python实现通过继承覆盖方法示例
- 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?
- Java回顾:用一个Demo来说明继承抽象类和实现接口的简单框架模型
- 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类
- 接口和抽象类的继承和实现
- 匿名内部类 Anoymous Inner Class, 可以继承抽象类,实现接口
- 在Flex/ActionScript3中实现抽象类及继承机制解密
- delphi实现一个类继承抽象类并实现接口