modifying a standard module?

Ulli Horlacher framstag at rus.uni-stuttgart.de
Fri Feb 12 17:46:59 EST 2016


Matt Wheeler <m at funkyhat.org> wrote:

> > How can I substitute the standard module function tarfile.extractall() with
> > my own function?
> 
> import tarfile
> def new_extractall(self, *args, **kwargs):
>     print("I am a function. Woohoo!")
> 
> tarfile.TarFile.extractall = new_extractall

This is more easy than I could imagined :-)
It is in my Python notes, now.


> But bear in mind that that will change tarfile.extractall for every
> single module that imports it within the same python process. Is that
> really what you want?

Yes. I have no own modules. Just one program file.


> Is there a reason you can't subclass TarFile as others have suggested?

The reason: I have no ideas on classes :-}

Of course, I should have to learn about, but until now it was not necessary.
The other solutions in this thread are sufficent for me.

Meanwhile I have implemented the iterator function:

    taro.extractall(members=itar(taro),path=edir)

def itar(tar):
  for ti in tar:
    # minimal protection against dangerous file names
    # see http://bugs.python.org/issue21109#msg215656
    ti.name = subst(r'^(?i)([a-z]:)?(\.\.)?[/\\]','',ti.name)
    print('untar "%s"' % ti.name)
    yield ti
    

Perfekt solution for me :-)
Thanks to all.


> If you must patch the standard library tarfile module then I would
> suggest patching it to have an extra, default False, argument to
> enable your printing behaviour, so you don't risk messing up anyone
> else's use of it.

Yes, a good idea.


-- 
Ullrich Horlacher              Server und Virtualisierung
Rechenzentrum IZUS/TIK         E-Mail: horlacher at tik.uni-stuttgart.de
Universitaet Stuttgart         Tel:    ++49-711-68565868
Allmandring 30a                Fax:    ++49-711-682357
70550 Stuttgart (Germany)      WWW:    http://www.tik.uni-stuttgart.de/


More information about the Python-list mailing list