@classmethod
def create(cls, *args, **kwargs):
    """
        Create an object which best suits the given file. It first opens the
        file as a GenericFile and then uses the mimetype analysis to suggest
        the best class to use.

        :param args:   The args to pass to the file class.
        :parak kwargs: The kwargs to pass to the file class.
        :return:       A class inheriting from GenericFile.
        """
    cls_file = cls(*args, **kwargs)
    mime = cls_file.mime()
    _type, subtype = mime.split('/', 1)
    if (_type == 'image' or mime == 'application/x-xcf' or cls_file.is_type
        ('svg')) and subtype not in ('vnd-djvu', 'vnd.djvu'):
        from file_metadata.image.image_file import ImageFile
        return ImageFile.create(*args, **kwargs)
    elif _type == 'audio':
        from file_metadata.audio.audio_file import AudioFile
        return AudioFile.create(*args, **kwargs)
    elif _type == 'application':
        from file_metadata.application.application_file import ApplicationFile
        return ApplicationFile.create(*args, **kwargs)
    elif _type == 'video':
        from file_metadata.video.video_file import VideoFile
        return VideoFile.create(*args, **kwargs)
    return cls_file
