加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-16 20:09:40 所属栏目:Python 来源:网络整理
导读:本篇章节讲解python继承和抽象类的实现方法。供大家参考研究。 具体实现方法如下: 复制代码 代码如下: #!/usr/local/bin/python # Fig 9.9: fig09_09.py # Creating a class hierarchy with an abstract base class. class Employee: """Abstract b

本篇章节讲解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,last,salary):
      """Boss constructor,takes first and last names and salary"""
 
      Employee.__init__(self,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,salary,commission,quantity):
      """CommissionWorker constructor,takes first and last names,
      salary,commission and quantity"""
 
      Employee.__init__(self,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,wage,quantity):
      """PieceWorker constructor,wage
      per piece and quantity"""
 
      Employee.__init__(self,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,hours):
      """HourlyWorker constructor,
      wage per hour and hours worked"""
 
      Employee.__init__(self,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程序设计有所帮助。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读