Bonjour,

Je voudrais surcharger la classe file (pour dans un cas précis de fichier, filtrer certaines lignes, en modifier d'autres)

J'ai un problème de récursion infinie dans la méthode __iter__ que j'ai définie dans ma classe dérivée.
Comme si l'appel à super(classedérivéedefile,self).__iter__() appelait en fait classederiveedefile.__iter__ au lieu de file.__iter__

J'imagine que file a bien une methode __iter__, puisqu'on peut itérer dessus ?

Voici le code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/python
mport os
import sys
 
class MachinFile(file):
  def __init__(self, name, errfile, *args, **kwargs):
    self.errfile=errfile
    super(MachinFile,self).__init__(name, *args,**kwargs)
 
  def __iter__(self):
    for l in super(MachinFile,self).__iter__(): # est ce que ce n est pas le __iter__ de la classe derivee qui est appelée ?
      yield l+self.errfile
 
with MachinFile("ess.py","search") as f:
  for l in f:
    print(l)
ET voici la sortie :

...
for l in s:
File "./ess.py", line 16, in __iter__
for l in s:
File "./ess.py", line 16, in __iter__
for l in s:
RuntimeError: maximum recursion depth exceeded while calling a Python object

Merci de votre aide