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!
4 Réponses :
vous écrivez w3.pay(25)
w3 = changeRate (35) pourquoi pas w3.changeRate (35)
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) **
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)
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)