0
votes

Héritage en Python: ne pas s'attendre à ce que l'on s'attend à O / P

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

1 commentaires

Changer employé.rise_amount à self.rise_amount et réfléchissez-y


3 Réponses :


1
votes

Vous créez une sous-classe, mais le parent utilise employé.rise_amount pour calculs, codage dur de la classe. Changez-le à Self.Reise_Amount de sorte que la méthode des parents utilise la variable de sous-classe à la place. xxx


0 commentaires

2
votes

Vous devez changer xxx

à xxx

de cette façon, la recherche de la variable de classe est effectuée comme vous l'attendez.

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.


2 commentaires

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 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.



0
votes

DEF Apply_Reise (auto): Self.Pay = int (Self.Pay * Employee.Reise_Amount)

Essayez de remplacer l'employé avec soi-même

DEF Apply_Reise (auto): Self.Pay = Int (Self.Pay * Self.Rise_Amount)


0 commentaires