python中的继承和抽象类的实现
2011-08-05 11:31 Rollen Holt 阅读(2774) 评论(0) 编辑 收藏 举报1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | #!/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
我喜欢程序员,他们单纯、固执、容易体会到成就感;面对压力,能够挑灯夜战不眠不休;面对困难,能够迎难而上挑战自我。他
们也会感到困惑与傍徨,但每个程序员的心中都有一个比尔盖茨或是乔布斯的梦想“用智慧开创属于自己的事业”。我想说的是,其
实我是一个程序员
==============================================================================
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 《HelloGitHub》第 106 期
· 数据库服务器 SQL Server 版本升级公告
· 深入理解Mybatis分库分表执行原理
· 使用 Dify + LLM 构建精确任务处理应用