L'utilisation de l'héritage en python
c'est mon devoir, je l'ai vu affiché sur le site web avant, mais il semble que c'était pas résolu et j'ai eu un autre message d'erreur qu'une personne qui pose la question avant de.
la première partie du problème est de définir la sous-classe des Travailleurs qui hérite de l'Employé et comprend un attribut qui fait référence à un autre employé qui est le gestionnaire du travailleur. Vous devez définir une méthode get_manager qui renvoie les travailleurs manager.
Exemple:
worker = Worker("Fred", 52000, myboss)
La deuxième partie du problème est de définir l'Exécutif de la sous-classe qui hérite de l'Employé et comprend un attribut qui fait référence à la prime annuelle.
Vous devez remplacer le salaire méthode de calcul de la rémunération des dirigeants sur la base de son salaire et de la prime. Vous devez utiliser la méthode de salaire de l'Employé dans la définition du salaire de la méthode pour la classe affaires.
Exemple:
executive = Executive("Kerry", 520000, 1040000)
Mon code est écrit ci-dessous et le message d'erreur que je reçois est: "global nom de "salaire" n'est pas défini "dans la ligne" Employé.init(self, nom, salaire) ' pour la classe de Direction (Il travaille pour la catégorie des Travailleurs). Pourquoi j'obtiens cette erreur et comment puis-je résoudre ce problème?
Merci pour votre aide!
class Employee(object):
def __init__(self, name, salary):
self._name = name
self._salary = salary
def my_name(self):
return self._name
def wage(self):
return self._salary/26 # fortnight pay
class Worker(Employee):
def __init__(self, name, salary, manager):
Employee.__init__(self, name, salary)
self._manager = manager
def getManager(self):
return self._manager
class Executive(Employee):
def __init__(self, name, wage, yearlyBonus):
Employee.__init__(self, name, salary)
self._yearlyBonus = yearlyBonus
def wage(self):
return Employee.wage(self)
self._yearlyBonus
dans le calcul des salaires pour Executive
J'ai corrigé mon code, mais j'ai toujours le message d'erreur "vous avez un mauvais salaire pour le général" ...
Est-ce un réel message d'erreur? Et où est-il en venir? Ne pas le yearlyBonus seulement être appliqué une fois par année ou aussi être divisée par 26?
Merci Tobias! J'ai juste eu à le diviser par 26!
Merci à vous tous pour l'aide, le code fonctionne parfaitement maintenant!
OriginalL'auteur kate88 | 2013-04-21
Vous devez vous connecter pour publier un commentaire.
L'erreur est assez clair.
salary
n'est pas défini dans la__init__
méthode deExecutive
.Vous avez utilisé
wage
comme un argument de__init__
, maissalary
lors de l'appel de__init__
de votre classe parent, alors vous devez vous en tenir à un nom de variable:Aussi, vous pouvez obtenir autour de taper tous ces paramètres à chaque fois en utilisant
*args
:Utilisation
super()
au lieu d'appeler les parents de la classe__init__
méthode. Il permet l'héritage multiple un peu plus facile.D'où ce message est-il en venir? De quoi êtes-vous et quel est le bon salaire?
Ses résolu maintenant, j'ai juste eu à diviser le yearlyBonus par 26
OriginalL'auteur Blender
Il suffit de regarder le code où l'erreur se produit, et de continuer à chercher jusqu'à ce que vous remarquez ce qui ne correspond pas:
Je pense que ce second problème est dû à votre interprétation de l'énoncé du problème. Ce n'est pas le sujet pour Stack Overflow, cependant, que ce n'est pas un problème de programmation, mais plutôt l'un de vous comprendre votre affectation.
Oui, vous avez raison, j'ai corrigé le code maintenant et il fonctionne!
OriginalL'auteur John Zwinck
Oui, votre fonction init n'a pas de variable "salaire", ce qui donne une erreur lorsque vous passé à l'Employé.init.
lorsque vous faites cela
dont l'un est en corrélation avec le salaire? passé que l'employé méthode init. Mieux si vous appelez de l'Employé constructeur avec super
Deviner à partir de cette méthode
C'est peut-être ce que vous voulez (pas sûr de la façon de tenir compte yearlyBonus)
OriginalL'auteur marcadian
Regardez la déclaration de
Executive.__init__
:Nulle part il ne déclare une variable nommée
salary
. Mais lorsque vous appelez le constructeur de la superclasse,vous demandez Python pour transmettre la valeur d'une variable nommée
salary
comme troisième paramètre. Python est juste pour se plaindre que cette variable n'existe pas.J'imagine que vous pouvez comprendre comment résoudre le problème à partir de là. 🙂
OriginalL'auteur David Z