我不知道为什么会收到错误消息:NameError:未定义名称'changeRate'

时间:2020-01-04 13:21:57

标签: python class nameerror

这是我的代码:

w1 = ch8.Worker("Joe", 15)
print(w1.pay(35))  # Not implemented

w2 = ch8.SalariedWorked("Sue", 14.50)
print(w2.pay())  # 580.0
print(w2.pay(60))  # 580.0

w3 = ch8.HourlyWorker("Dana", 20)
print(w3.pay(25))  # 500
w3 = changeRate(35)
print(w3.pay(35))  # 875

这是我在文件ch8.py中实现的Worker,SalarieWorked和HourlyWorker类:​​

class Worker:
    def __init__(self, worker_name="Unknown", hourly_pay_rate=0.0):
        self.worker_name = str(worker_name)
        self.hourly_pay_rate = float(hourly_pay_rate)

    def changeRate(self, new_pay_rate):
        self.new_pay_rate = float(new_pay_rate)
        self.hourly_pay_rate = self.new_pay_rate

    def pay(self, number_of_hours):
        self.number_of_hours = number_of_hours
        return "Not implemented"


class HourlyWorker(Worker):
    def pay(self, number_of_hours):
        self.number_of_hours = int(number_of_hours)
        if self.number_of_hours > 40:
            return (
                40 * self.hourly_pay_rate
                + (self.number_of_hours - 40) * self.hourly_pay_rate * 2
            )
        return self.number_of_hours * self.hourly_pay_rate


class SalariedWorked(Worker):
    def pay(self, number_of_hours=40):
        self.number_of_hours = int(number_of_hours)
        return 40 * self.hourly_pay_rate

这是我执行代码时得到的:

未实现
580.0
580.0
500.0
追溯(最近一次通话):
文件“ C:\ Users \ carol \ PycharmProjects \ ProblemasPraticos \ book_Intro_Computing_Using_Python \ Chapter 8 \ 8_Exercises.py”,第137行,在
中 w3 = changeRate(35)
NameError:名称'changeRate'未定义



有人可以帮助我了解为什么会出现此错误?

谢谢!

4 个答案:

答案 0 :(得分:2)

您编写 w3.pay(25)

w3 = changeRate(35)

为什么不 w3.changeRate(35)

答案 1 :(得分:2)

您正在重写该功能。

致电时 w3 = ch8.HourlyWorker("Dana", 20) 您正在创建类型为 HourlyWorker的对象w3。

然后,您在编写w3 = changeRate(35)

时将功能分配给类对象

这是不允许的。

尝试仅执行w3.changeRate(35)而不是**w3 = changeRate(35)**

答案 2 :(得分:2)

changeRateWorker类的一种方法,因此要使用它,您需要从类实例中调用它

示例:

w3.changeRate(35)

答案 3 :(得分:2)

changeRate()是类Worker的方法。因此,您必须通过类的实例来调用它。 类HourlyWorker继承自类Worker。因此,方法changeRate()在类HourlyWorker中可用。

要实现您的目标,请用以下行替换行w3 = changeRate(35)w3.changeRate(35)