'Extract a member from the archive to the current working directory,
using its full name. Its file information is extracted as accurately
as possible. `member\' may be a filename or a TarInfo object. You can
specify a different directory using `path\'. File attributes (owner,
mtime, mode) are set unless `set_attrs\' is False.'

def extract(self, member, path='', set_attrs=True):

    self._check('r')
    if isinstance(member, str):
        tarinfo = self.getmember(member)
    else:
        tarinfo = member
    if tarinfo.islnk():
        tarinfo._link_target = os.path.join(path, tarinfo.linkname)
    try:
        self._extract_member(tarinfo, os.path.join(path, tarinfo.name), set_attrs=set_attrs)
    except EnvironmentError as e:
        if (self.errorlevel > 0):
            raise
        elif (e.filename is None):
            self._dbg(1, ('tarfile:    %s' % e.strerror))
        else:
            self._dbg(1, ('tarfile:    %s    %r' % (e.strerror, e.filename)))
    except ExtractError as e:
        if (self.errorlevel > 1):
            raise
        else:
            self._dbg(1, ('tarfile:    %s' % e))
