Bonjour,
Le 11/04/2021 à 15:26, Olivier Miakinen a écrit dans le message
<s4utdp$335$
1...@cabale.usenet-fr.net> :
> Dans une classe j'ai la méthode suivante. Peu importe le détail de ce
> qu'elle fait, le point important est tous ces « print » avec le paramètre
> « file=file ».
>
> def print(self, indent=0, *, file=sys.stdout):
> """Imprime un filtre auto-indenté"""
> print(" "*indent, end="", file=file)
> if self.neg: print("!", end="", file=file)
> if (self.t == "RE"):
> print(f"{self.key} /{self.regex.pattern}/", file=file)
> else:
> print(self.t, file=file)
> for subf in self.subs: subf.print(indent+1, file=file)
>
> Ma question : y a-t-il un moyen de « factoriser » ce paramètre, avec une
> syntaxe du style « with file=file », de façon à pouvoir le supprimer de
> tous les appels à la fonction print() ?
Je vois deux possibilités :
1. tu utilises file pour écrire :
def print(self, indent=0, *, file=sys.stdout):
"""Imprime un filtre auto-indenté"""
file.write(" "*indent)
if self.neg: file.write("!")
if (self.t == "RE"):
file.write(f"{self.key} /{self.regex.pattern}/\n")
else:
file.write(f'{self.t}\n')
for subf in self.subs: subf.print(indent+1, file=file)
2. tu remplaces le print() par le tiens :
def print(self, indent=0, *, file=sys.stdout):
"""Imprime un filtre auto-indenté"""
def print(*args, **kw):
kw['file'] = file
__builtins__.print(*args, **kw)
print(" "*indent, end="")
if self.neg: print("!", end="")
if (self.t == "RE"):
print(f"{self.key} /{self.regex.pattern}/")
else:
print(self.t, file=file)
for subf in self.subs: subf.print(indent+1)
> [
> Question subsidiaire : comment traduire au mieux le sens de « print » dans
> le commentaire au début de ma fonction ? Je n'ai pas l'impression que le
> terme « imprime » ni le terme « affiche » ne conviennent dans tous les cas.
> ]
Écrire la représentation du filtre dans « file » ?
Après vu que je ne sais pas trop ce que ça représente, c'est difficile
de dire.
--
Benoit Izac