2017-10-07 5 views
1

Je suis nouveau à Python. Dans cette question, je suis en train de créer une méthode en python pour que je puisse imprimer à partir de mon entrée de l'information de l'étudiant:Comment puis-je faire avec cette méthode pour obtenir le résultat?

class student(): 
    def __init__(self,s=None): 
     if (s != None): 
      self.name = s[0] 
      self.age = s[1] 
     else: 
      self.name = '' 
      self.age = -1 
    def print_info(self): 
      print('Name: ',self.name) 
      print('Age: ',self.age) 

L'entrée est:

t = student() 
t.add_name('Sam') 
t.add_age(21) 
print(t) 

Je me attends à obtenir:

Nom: Sam Âge: 21

J'ai essayé à plusieurs reprises dans ce code qui donne le message d'erreur « str n'est pas appelable » Merci!

+0

Le code d'entrée n'est pas censé être changé! Le problème principal est de changer la méthode et les fonctions pour exécuter le code d'entrée. Je vous remercie! –

Répondre

0
class student(): 
def __init__(self,s=None): 
    if (s != None): 
     self.name = s[0] 
     self.age = s[1] 
    else: 
     self.name = '' 
     self.age = -1 
def __repr__(self): 
     print('Name: ',self.name) 
     print('Age: ',self.age) 

def __str__(self): 
    return 'Name: ' + self.name + '\n' + 'Age: ' + self.age.__str__() 

def add_name(self,name): 
    self.name = name 

def add_age(self,age): 
    self.age = age 
0

OK Je vois plusieurs problèmes

1- Il n'y a pas add_name ou add_age dans la classe d'appeler.
2- Pour imprimer l'objet de la classe créée sous forme de chaîne, vous avez besoin d'une représentation sous forme de chaîne de cette classe ou de cet objet. Cette représentation est effectuée via la méthode __str__ qui renvoie la représentation sous forme de chaîne.

Le code édité serait

#Added inheritance of `object` as good practice 
#and changed the name to make the first letter as capital 
class Student(object): 
    def __init__(self, s=None): 
     if s is not None: 
      self.name = s[0] 
      self.age = s[1] 
     else: 
      self.name = '' 
      self.age = -1 

    #added two missing methods to set the name and the age 
    def add_name(self, name): 
     self.name = name 

    def add_age(self, age): 
     self.age = age 

    #added the method responsible for string representation 
    #of the object and the age converted to string using similar method 
    def __str__(self): 
     return 'Name: ' + self.name + '\n' + 'Age: ' + self.age.__str__() 

    def print_info(self): 
     print('Name: ', self.name) 
     print('Age: ', self.age) 

L'entrée serait tout comme (avec changement de nom de la classe à l'autre Camel (première lettre est capitale)

#only class name changed to be first letter is capital letter 
t = Student() 
t.add_name('Sam') 
t.add_age(21) 
print(t) 

sortie est

Nom: Sam
Âge: 21

J'espère que répond à la question

+0

Merci beaucoup pour votre réponse! J'ai eu l'idée maintenant! –

+0

Vous êtes les bienvenus @HAHHA_HAH. N'hésitez pas à vérifier la réponse comme meilleure réponse qui a résolu votre problème s'il est apte à le faire ou votez si vous le pouvez. – Anddo