1
votes

Je ne sais pas pourquoi j'obtiens l'erreur: NameError: le nom 'changeRate' n'est pas défini

Voici mon code:

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

Et ce sont les classes Worker, SalarieWorked et HourlyWorker que j'ai implémentées dans le fichier ch8.py:

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

Voici ce que j'obtiens lorsque j'exécute le code:

Non mis en œuvre
580,0
580,0
500,0
Traceback (dernier appel le plus récent):
Fichier "C: \ Users \ carol \ PycharmProjects \ ProblemasPraticos \ book_Intro_Computing_Using_Python \ Chapter 8 \ 8_Exercises.py", ligne 137, dans
w3 = changeRate (35)
NameError: le nom 'changeRate' n'est pas défini



Quelqu'un pourrait m'aider à comprendre pourquoi cette erreur?

Merci!


0 commentaires

4 Réponses :


2
votes

vous écrivez w3.pay(25)

w3 = changeRate (35)

pourquoi pas w3.changeRate (35)


0 commentaires

2
votes

Vous remplacez la fonction.

Lorsque vous appelez w3 = ch8.HourlyWorker ("Dana", 20) vous créez un objet w3 de type HourlyWorker.

Ensuite, vous affectez une fonction à l'objet de classe lorsque vous écrivez w3 = changeRate (35)

Ceci n'est pas autorisé.

Essayez de faire simplement w3.changeRate (35) au lieu de ** w3 = changeRate (35) **


0 commentaires

2
votes

changeRate est une méthode de la classe Worker , donc pour l'utiliser, vous devez l'appeler depuis la classe instanse

Exemple:

w3.changeRate(35)


0 commentaires

2
votes

changeRate () est une méthode de la classe Worker . Donc, vous devez l'appeler via une instance de la classe. La classe HourlyWorker hérite de la classe Worker . La méthode changeRate () est donc disponible dans la classe HourlyWorker .

Pour atteindre votre objectif, remplacez la ligne w3 = changeRate (35) par cette ligne: w3.changeRate(35)


0 commentaires