class Employee: raise_amount = 1.02 def __init__(self, first, last, pay): self.first = first self.last = last self.pay = pay self.email = first+'.'+last+'@company.com' def fullname(self): return f"Full name is {self.first} {self.last}" def apply_raise(self): self.pay = int(self.pay * Employee.raise_amount) class Developer(Employee): raise_amount = 1.10 dev1 = Developer('Test1','User1',20000) dev2 = Developer('Test2','User2',25000) print(dev1.pay) dev1.apply_raise() print(dev1.pay) O/p : 20000 20400where as the o/p should have been 20000 2200022000, Because we are overriding the class variable in the subclasswhat is that which im doing wrong here
3 Réponses :
Vous créez une sous-classe, mais le parent utilise employé.rise_amount code> pour calculs, codage dur de la classe. Changez-le à
Self.Reise_Amount code> de sorte que la méthode des parents utilise la variable de sous-classe à la place.
Vous devez changer à p> de cette façon, la recherche de la variable de classe est effectuée comme vous l'attendez. P> Il sera tout moins déroutant si vous utilisez une variable d'instance au lieu d'une variable de classe pour réaliser ce que vous voulez. p> p>
C'est toujours une variable de classe
@Madphysiciste Oui. C'est pourquoi j'ai écrit "de cette façon la recherche de la variable de classe b> est effectuée comme vous l'attendez." Je ne mentionne que dans une note latérale, que l'utilisation d'une variable d'instance depuis le début pourrait conduire à un comportement moins surprenant.
DEF Apply_Reise (auto): Self.Pay = int (Self.Pay * Employee.Reise_Amount) P>
Essayez de remplacer l'employé avec soi-même p>
DEF Apply_Reise (auto): Self.Pay = Int (Self.Pay * Self.Rise_Amount) P>
Changer
employé.rise_amount code> à
self.rise_amount code> et réfléchissez-y