__str__ ou __repr__
Petite question,
j'ai bien lu l'article "à quoi sert le __str__". Si j'ai bien compris __str__ et __repr__ les deux méthodes permettent d'afficher en chaine de caractère un object, l'une ou l'autre devrait renvoyer le même résultat. alors pourquoi ici non ?
def __str__(self):
return self.prenom +" " + self.nom
ici j'ai un retour type object
def __repr__(self):
return self.prenom +" " + self.nom
ici j'ai bien le résultat escompté.
Salut Mehdi,
peux tu me mettre une capture de ta classe et aussi de tes différents tests où tu vois un résultat différent entre str et repr.
Tu es sur Django ?
* Sans la methode str ou repr
#+begin_src python :results output
class User:
def __init__(self, nom, prenom):
self.nom = nom
self.prenom = prenom
user = User("Dupond", "Jean")
print(user)
#+end_src
#+RESULTS:
: <__main__.User object at 0x100f16f10>
* Avec str
#+begin_src python :results output
class User:
def __init__(self, nom, prenom):
self.nom = nom
self.prenom = prenom
def __str__(self):
return f"{self.nom} {self.prenom}"
user = User("Dupond", "Jean")
print(user)
#+end_src
#+RESULTS:
: Dupond Jean
* Avec repr
#+begin_src python :results output
class User:
def __init__(self, nom, prenom):
self.nom = nom
self.prenom = prenom
def __repr__(self):
return f"{self.nom} {self.prenom}"
user = User("Dupond", "Jean")
print(user)
#+end_src
#+RESULTS:
: Dupond Jean
Les 2 str et repr donnent bien le même output.
Peut être un pb d'indentation ?
N'hésite pas si tu as toujours un problème.
Salut Mehdi !
Je te conseille également la lecture des deux glossaires avec notamment un récapitulatif de tous les cas de figure et le résultat que cela donne en fonction de si ta classe contient __str__, __repr__ ou les deux :
Ok au risque de paraitre un peu lourd, a quoi servent ces méthodes si on utilise le décorateur @dataclasse qui si j'ai bien suivie inclut la méthode __repr__
from dataclasses import dataclass
class Entreprise:
nom = "Docstring"
employes = []
@dataclass
class Employe:
prenom: str
nom: str
position: str
salaire: int
def __repr__(self):
return f"{self.prenom} {self.nom}"
merci pour ces éclairages
Inscris-toi
(c'est gratuit !)
Tu dois créer un compte pour participer aux discussions.
Créer un compte