Bonjour a toutes et a tous,
J'ai cette classe :
from collections import deque
class Fifo:
    def _init_(self):
        self.queue = deque()
    def _repr_(self):
        contents = ",".join(str(item) for item in reversed(self.queue))
        return f ' [Fifo {contents}]'
    def incoming(self,item):
         self.queue.insert(0,item)
    def outgoing(self):
         if sel.queue:
             return self.queue.pop()
Je ne comprends pas bien la fonction repr() .
Es-ce que repr est un mot réservé ?
Je comprends ce que fait .join , mais pour le reste de cette fonction , que fait ' str(item) for item in reversed(self.queue) ' ? Est ce une compréhension de liste ?
que retourne ' return f' [Fifo {contents}] ' ?
Merci de votre aide .
Bonjour,
chris7522 a écrit Je ne comprends pas bien la fonction repr() .
Es-ce que repr est un mot réservé ?
Oui.
def __repr__() est appelée quand tu fait un print de ton instance. Elle permet de formater ta sortie comme tu le souhaites
>>> class Bidon:
...     def __init__(self, mot):
...         self.mot = mot
...     def __repr__(self):
...         return self.mot.upper()
... 
>>> instance = Bidon('le vilain petit canard deviendra ...')
>>> print(instance)
LE VILAIN PETIT CANARD DEVIENDRA ...
>>> 

chris7522 a écrit Je comprends ce que fait .join , mais pour le reste de cette fonction , que fait ' str(item) for item in reversed(self.queue) ' ? Est ce une compréhension de liste ?
non , c'est une expression génératrice.
C'est équivalent à:
",".join((str(item) for item in reversed(self.queue)))
Pour ce qui est du fonctionnement de deque , je te laisse chercher dans la documentation. Savoir chercher est une compétence incontournable en programmation. Je dirais que l'informatique c'est 80% de recherche pour 20% de code. 😉
pseudofab a écritBonjour,
chris7522 a écrit Je ne comprends pas bien la fonction repr() .
Es-ce que repr est un mot réservé ?
Oui.
def __repr__() est appelée quand tu fait un print de ton instance. Elle permet de formater ta sortie comme tu le souhaites
Bonjour pseudofab . Merci de ta réponse .
Il y a t il une difference entre ' def _repr_(self): ' et ' def _str_(self): ?
N'est ce pas le meme emploi ?
Si dans le code, il y a que __str__() ou que __repr__() de définit, le compotement est identique.

Si dans le code, les deux sont présents. Alors print(instance) utilisera la méthode __str__() .
Dans ce cas la méthode __repr__() ne sera appellée que lorsqu'on montre l'instance sans passer par print().
Exemple sera plus parlant:
>>> class Bidon:
...     def __init__(self):
...             pass
...     def __str__(self):
...             return f"yop"
...     def __repr__(self):
...             return "truc"
... 
>>> instance = Bidon()
>>> print(instance)
yop
>>> instance
truc
>>> 
Bien compris.
Une nouvelle fois , merci 🙂
Avec plaisir. à bientôt ici ou ailleurs .
(nous avons déjà échangé ailleurs, mais tu l'ignores car perso, car j'ai un pseudo différent sur chacun des sites que je fréquente ... )
Moi qui pensais vous faire souffler un peu avec mes questions incéssantes en alternant le forum ubuntu et développez.com ! 😃