St = Student() TypeError: __init__() missing 2 required pos
Résolu
Bonjour,
Je suis débutant en python. Voici mon code
Lorsque j'exécute :
... j'ai l'erreur :
Comment résoudre cette erreur ?
Merci pour toute aide...
Je suis débutant en python. Voici mon code
class Student:
def __init__(self, name, userid, rep):
self.name = name
self.userid = userid
self.rep = rep
def describ_std(self) :
name = input("Enter name: ")
userid = int(input("Enter user id: "))
rep = int(input("Enter rep: "))
def typing(self):
print(name,userid,rep )
karl = Student.describ_std()
def main():
karl.describ_std()
karl.typing()
main()
Lorsque j'exécute :
st = Student()
... j'ai l'erreur :
TypeError: __init__() missing 2 required positional arguments: 'sid' and 'snom'
Comment résoudre cette erreur ?
Merci pour toute aide...
1 réponse
-
Bonjour,
La méthode__init__
(appelée parfois constructeur) est appelée lorsque tu appellesStudent()
. Comme tu n'as passé aucun argument entre parenthèse, au niveau de la classe,self
est (toujours) renseigné, mais pasname
,userid
etrep
. Note que ton message d'erreur laisse penser que tu n'as pas réévaluer le code déclarant la classeStudent
. Bref, il faudrait par exemple appeler :
st = Student("My Name", 123, 456)
... qui au niveau deStudent.__init__
permet de recevoir respectivement:-
"My Name"
pourname
; -
123
pouruserid
; -
456
pourrep
;
Les autres appels de méthodes sont de la formestudent.methode(parametre1, parametre2, ...)
oùstudent
est une instance de la classeStudent
.
On notera en particulier que l'appelkarl = Student.describ_std()
n'est pas cohérent. Ce devrait probablement être une fonction extérieure à la classeStudent
ou à la rigueur une méthode de classe ou une méthode statique. En effet, à ce stade, elle ne dépend pas deself
, et en terme de code, elle initialise des variables locales qui ne sont pas retournées. C'est donc comme si elle ne faisait rien.
D'autres choses ne vont pas. Ta méthodetyping
implique des variables locales qui ne sont pas définies (ni paramètres, ni déclarées). Ce que tu veux récupérer, c'est probablement les attributs de l'instance couranteself
doncself.name
,self.userid
, etc.
Après correction ton code pourrait ressembler à ceci :
class Student: def __init__(self, name, userid, rep): self.name = name self.userid = userid self.rep = rep def typing(self): print(self.name, self.userid, self.rep) def describ_std(): name = input("Enter name: ") userid = int(input("Enter user id: ")) rep = int(input("Enter rep: ")) return Student(name, userid, rep) def main(): karl = describ_std() karl.typing() main() -