St = Student() TypeError: __init__() missing 2 required pos

Résolu/Fermé
alexander - Modifié le 28 févr. 2022 à 18:33
mamiemando Messages postés 33093 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 mai 2024 - 28 févr. 2022 à 18:32
Bonjour,

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...
A voir également:

1 réponse

mamiemando Messages postés 33093 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 mai 2024 7 752
28 févr. 2022 à 18:32
Bonjour,

La méthode
__init__
(appelée parfois constructeur) est appelée lorsque tu appelles
Student()
. Comme tu n'as passé aucun argument entre parenthèse, au niveau de la classe,
self
est (toujours) renseigné, mais pas
name
,
userid
et
rep
. Note que ton message d'erreur laisse penser que tu n'as pas réévaluer le code déclarant la classe
Student
. Bref, il faudrait par exemple appeler :

st = Student("My Name", 123, 456)


... qui au niveau de
Student.__init__
permet de recevoir respectivement:
  • "My Name"
    pour
    name
    ;
  • 123
    pour
    userid
    ;
  • 456
    pour
    rep
    ;


Les autres appels de méthodes sont de la forme
student.methode(parametre1, parametre2, ...)
student
est une instance de la classe
Student
.

On notera en particulier que l'appel
karl = Student.describ_std()
n'est pas cohérent. Ce devrait probablement être une fonction extérieure à la classe
Student
ou à la rigueur une méthode de classe ou une méthode statique. En effet, à ce stade, elle ne dépend pas de
self
, 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éthode
typing
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 courante
self
donc
self.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()
0