Я не знаю, почему я получаю сообщение об ошибке: NameError: имя 'changeRate' не определено

Это мой код:

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

А это классы Worker, SalarieWorked и HourlyWorker, которые я реализовал в файле ch8.py:

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: name ' changeRate' не определен



Кто-нибудь может помочь мне понять, почему эта ошибка?

Спасибо!


person carol    schedule 04.01.2020    source источник


Ответы (4)


вы пишете w3.pay(25)

w3 = скорость изменения (35)

почему бы и нет w3.changeRate(35)

person trytrysee    schedule 04.01.2020

Вы переопределяете функцию.

Когда вы вызываете w3 = ch8.HourlyWorker("Dana", 20), вы создаете объект w3 типа HourlyWorker.

Затем вы назначаете функцию объекту класса, когда пишете w3 = changeRate(35)

Это не разрешено.

Попробуйте сделать просто w3.changeRate(35) вместо **w3 = changeRate(35)**

person Amber Bhanarkar    schedule 04.01.2020

changeRate — это метод класса Worker, поэтому для его использования вам нужно вызвать его из экземпляра класса

Пример:

w3.changeRate(35)
person weAreStarDust    schedule 04.01.2020

changeRate() — это метод класса Worker. Итак, вы должны вызывать его через экземпляр класса. Класс HourlyWorker наследуется от класса Worker. Таким образом, метод changeRate() доступен в классе HourlyWorker.

Для достижения цели замените строку w3 = changeRate(35) на эту строку: w3.changeRate(35)

person codrelphi    schedule 04.01.2020