code: def extractfile(self, member):
          
          self._check("r")
  
          if isinstance(member, str):
              tarinfo = self.getmember(member)
          else:
              tarinfo = member
  
          if tarinfo.isreg():
              return self.fileobject(self, tarinfo)
  
          elif tarinfo.type not in SUPPORTED_TYPES:
              # If a member's type is unknown, it is treated as a
              # regular file.
              return self.fileobject(self, tarinfo)
  
          elif tarinfo.islnk() or tarinfo.issym():
              if isinstance(self.fileobj, _Stream):
                  # A small but ugly workaround for the case that someone tries
                  # to extract a (sym)link as a file-object from a non-seekable
                  # stream of tar blocks.
                  raise StreamError("cannot extract (sym)link as file object")
              else:
                  # A (sym)link's file object is its target's file object.
                  return self.extractfile(self._find_link_target(tarinfo))
          else:
              # If there's no data associated with the member (directory, chrdev,
              # blkdev, etc.), return None instead of a file object.
              return None
docs: Extract a member from the archive as a file object. `member' may be
             a filename or a TarInfo object. If `member' is a regular file, a
             file-like object is returned. If `member' is a link, a file-like
             object is constructed from the link's target. If `member' is none of
             the above, None is returned.
             The file-like object is read-only and provides the following
             methods: read(), readline(), readlines(), seek() and tell()