【问题标题】:TypeError: unorderable types: ShiftSupervisor() < int()TypeError:不可排序的类型:ShiftSupervisor() < int()
【发布时间】:2014-12-21 03:25:38
【问题描述】:

当我使用以下程序运行以下程序时,我得到了不可排序的类型: Employee 类的 ShiftSupervisor 子类。在这个子类中,我想根据输入主程序时的年销售额来确定奖金 $。

#This Employee class holds general data about employess and will
# end up as the superclass for this example.

class Employee:
  def __init__(self, emp_name, emp_number):
    self.emp_name = emp_name
    self.emp_number = emp_number

  def set_emp_name(self, emp_name):
    self.emp_name = emp_name

  def set_emp_number(self, emp_number):
    self.emp_number = emp_number

  def get_emp_name(self):
    return self.emp_name

  def get_emp_number(self):
    return self.emp_number

#The ShiftSupervisor class holds the general data from superclass Employee
# as well as Employee shift time and pay rate making it a subclass
# of Employee.

class ShiftSupervisor(Employee):

  def __init__(self, emp_name, emp_number, annual_salary, sales):
    #call the superclass
    Employee.__init__(self, emp_name, emp_number)
    self.annual_salary = annual_salary
    self.sales = sales

  def set_annual_salary(self, salary):
      self.annual_salary = salary

  def set_sales(self,sales):
    self.sales = sales

  def get_annual_salary(self):
    return self.annual_salary

  def get_sales(self):
    return self.sales

#Determining the bonus based on the sales figures.
  def bonus_rate(sales):
    if sales <10000:
      bonus_rate = sales*0.10
    if sales >=10000 and sales <= 14999:
      bonus_rate = sales*0.12
    if sales >=15000 and  sales <=17999:
      bonus_rate = sales*0.14
    if sales >=18000 and sales <= 21999:
      bonus_rate = sales*0.16
    else:
      bonus_rate = sales*0.18
      return bonus_rate

# The main program
import shiftsupervisor
def main():
  first = input("Enter the shift supevisor's first name:  ")
  last = input("Enter the the shift supevisor's last name:  ")
  emp_number = input("Enter the shift supevisor's  ID number.  ")
  salary = float(input("What is the annual salary of the shift supevisor?  $"))
  sales = float(input("What are the annual sales for the shift?  $"))
  emp_name = first + " " +last

  supervisor = shiftsupervisor.ShiftSupervisor(emp_name, emp_number, salary, sales)

  print()
  print('\t Shift Supervisor Information')
  print('---------------------------------------------------------------')
  print("Supervisor Name:        \t\t", supervisor.get_emp_name())
  print("Employee  Number:\t\t", supervisor.get_emp_number())
  print("Annual Salary for the supervisor is:  \t$ " , format(supervisor.get_annual_salary(),',.2f'),sep='')
  print("Annual Bonus for the supervisor is: \t$ ", format(supervisor.bonus_rate(), ',.2f'),sep = '')

main()

【问题讨论】:

  • bonus_rateinside ShiftSupervisor,所以第一个 (sales) 参数是实例本身。你的意思是self.sales
  • 我确实使用了 self.sales,但带来了“销售”,如下所示 -> get_bonus_rate(sales): 而不是这样做 -> get_bnous_rate(self):

标签: python subclass typeerror


【解决方案1】:

Python 方法的第一个参数始终是类的实例,传统上命名为“self”。要访问类的实例成员,您需要使用“self.name”语法。

 def bonus_rate(self):
     if self.sales < 10000:
          ....

【讨论】:

  • 谢谢你。你和上面的 johnsharpe 澄清了这一点。
猜你喜欢
  • 2016-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-05
  • 2016-12-18
相关资源
最近更新 更多