# coding: utf-8

"""
    videoplatform-api

    Interview Screening APIs allows to invite candidate to interview, evaluate and review candidates interview performances.  # noqa: E501

    OpenAPI spec version: 1.0.0
    Contact: support@phenompeople.com
    Generated by: phenom
"""

import pprint
import re  # noqa: F401

import six

class GetInterviewDetailsResponseData(object):
    """
    Attributes:
      swagger_types (dict): The key is attribute name
                            and the value is attribute type.
      attribute_map (dict): The key is attribute name
                            and the value is json key in definition.
    """
    swagger_types = {
        'video_screen_id': 'str',
        'number_of_questions': 'float',
        'status': 'str',
        'candidate_info': 'GetInterviewDetailsResponseDataCandidateInfo',
        'questions': 'list[GetInterviewDetailsResponseDataQuestions]',
        'interview_details': 'GetInterviewDetailsResponseDataInterviewDetails',
        'site_type': 'str',
        'locale': 'str',
        'date_created': 'int',
        'last_updated': 'int',
        'recruiter_details': 'GetInterviewDetailsResponseDataRecruiterDetails',
        'invitation_code': 'str',
        'validity_end_date_time_stamp': 'float',
        'interview_valid_for_in_days': 'float',
        'active': 'bool',
        'interview_overall_avg_rating': 'float',
        'timezone': 'str',
        'interview_url': 'str',
        'lc_candidate_name': 'str',
        'questionnaire_id': 'str',
        'assessment_score': 'float',
        'answered_score_points': 'float',
        'max_score_points': 'float',
        'attachment_status': 'bool'
    }

    attribute_map = {
        'video_screen_id': 'videoScreenId',
        'number_of_questions': 'numberOfQuestions',
        'status': 'status',
        'candidate_info': 'candidateInfo',
        'questions': 'questions',
        'interview_details': 'interviewDetails',
        'site_type': 'siteType',
        'locale': 'locale',
        'date_created': 'dateCreated',
        'last_updated': 'lastUpdated',
        'recruiter_details': 'recruiterDetails',
        'invitation_code': 'invitationCode',
        'validity_end_date_time_stamp': 'validityEndDateTimeStamp',
        'interview_valid_for_in_days': 'interviewValidForInDays',
        'active': 'active',
        'interview_overall_avg_rating': 'interviewOverallAvgRating',
        'timezone': 'timezone',
        'interview_url': 'interviewURL',
        'lc_candidate_name': 'lcCandidateName',
        'questionnaire_id': 'questionnaireId',
        'assessment_score': 'assessmentScore',
        'answered_score_points': 'answeredScorePoints',
        'max_score_points': 'maxScorePoints',
        'attachment_status': 'attachmentStatus'
    }

    def __init__(self, video_screen_id=None, number_of_questions=None, status=None, candidate_info=None, questions=None, interview_details=None, site_type=None, locale=None, date_created=None, last_updated=None, recruiter_details=None, invitation_code=None, validity_end_date_time_stamp=None, interview_valid_for_in_days=None, active=None, interview_overall_avg_rating=None, timezone=None, interview_url=None, lc_candidate_name=None, questionnaire_id=None, assessment_score=None, answered_score_points=None, max_score_points=None, attachment_status=None):  # noqa: E501
        """GetInterviewDetailsResponseData - a model defined in Swagger"""  # noqa: E501
        self._video_screen_id = None
        self._number_of_questions = None
        self._status = None
        self._candidate_info = None
        self._questions = None
        self._interview_details = None
        self._site_type = None
        self._locale = None
        self._date_created = None
        self._last_updated = None
        self._recruiter_details = None
        self._invitation_code = None
        self._validity_end_date_time_stamp = None
        self._interview_valid_for_in_days = None
        self._active = None
        self._interview_overall_avg_rating = None
        self._timezone = None
        self._interview_url = None
        self._lc_candidate_name = None
        self._questionnaire_id = None
        self._assessment_score = None
        self._answered_score_points = None
        self._max_score_points = None
        self._attachment_status = None
        self.discriminator = None
        self.video_screen_id = video_screen_id
        if number_of_questions is not None:
            self.number_of_questions = number_of_questions
        self.status = status
        self.candidate_info = candidate_info
        self.questions = questions
        self.interview_details = interview_details
        self.site_type = site_type
        self.locale = locale
        self.date_created = date_created
        self.last_updated = last_updated
        self.recruiter_details = recruiter_details
        self.invitation_code = invitation_code
        self.validity_end_date_time_stamp = validity_end_date_time_stamp
        self.interview_valid_for_in_days = interview_valid_for_in_days
        self.active = active
        self.interview_overall_avg_rating = interview_overall_avg_rating
        if timezone is not None:
            self.timezone = timezone
        self.interview_url = interview_url
        self.lc_candidate_name = lc_candidate_name
        self.questionnaire_id = questionnaire_id
        self.assessment_score = assessment_score
        self.answered_score_points = answered_score_points
        self.max_score_points = max_score_points
        self.attachment_status = attachment_status

    @property
    def video_screen_id(self):
        """Gets the video_screen_id of this GetInterviewDetailsResponseData.  # noqa: E501

        This is the interview id.  # noqa: E501

        :return: The video_screen_id of this GetInterviewDetailsResponseData.  # noqa: E501
        :rtype: str
        """
        return self._video_screen_id

    @video_screen_id.setter
    def video_screen_id(self, video_screen_id):
        """Sets the video_screen_id of this GetInterviewDetailsResponseData.

        This is the interview id.  # noqa: E501

        :param video_screen_id: The video_screen_id of this GetInterviewDetailsResponseData.  # noqa: E501
        :type: str
        """
        if video_screen_id is None:
            raise ValueError("Invalid value for `video_screen_id`, must not be `None`")  # noqa: E501

        self._video_screen_id = video_screen_id

    @property
    def number_of_questions(self):
        """Gets the number_of_questions of this GetInterviewDetailsResponseData.  # noqa: E501

        Number of questions in one way interview.  # noqa: E501

        :return: The number_of_questions of this GetInterviewDetailsResponseData.  # noqa: E501
        :rtype: float
        """
        return self._number_of_questions

    @number_of_questions.setter
    def number_of_questions(self, number_of_questions):
        """Sets the number_of_questions of this GetInterviewDetailsResponseData.

        Number of questions in one way interview.  # noqa: E501

        :param number_of_questions: The number_of_questions of this GetInterviewDetailsResponseData.  # noqa: E501
        :type: float
        """

        self._number_of_questions = number_of_questions

    @property
    def status(self):
        """Gets the status of this GetInterviewDetailsResponseData.  # noqa: E501

        Current status of one way interview.  # noqa: E501

        :return: The status of this GetInterviewDetailsResponseData.  # noqa: E501
        :rtype: str
        """
        return self._status

    @status.setter
    def status(self, status):
        """Sets the status of this GetInterviewDetailsResponseData.

        Current status of one way interview.  # noqa: E501

        :param status: The status of this GetInterviewDetailsResponseData.  # noqa: E501
        :type: str
        """
        if status is None:
            raise ValueError("Invalid value for `status`, must not be `None`")  # noqa: E501

        self._status = status

    @property
    def candidate_info(self):
        """Gets the candidate_info of this GetInterviewDetailsResponseData.  # noqa: E501


        :return: The candidate_info of this GetInterviewDetailsResponseData.  # noqa: E501
        :rtype: GetInterviewDetailsResponseDataCandidateInfo
        """
        return self._candidate_info

    @candidate_info.setter
    def candidate_info(self, candidate_info):
        """Sets the candidate_info of this GetInterviewDetailsResponseData.


        :param candidate_info: The candidate_info of this GetInterviewDetailsResponseData.  # noqa: E501
        :type: GetInterviewDetailsResponseDataCandidateInfo
        """
        if candidate_info is None:
            raise ValueError("Invalid value for `candidate_info`, must not be `None`")  # noqa: E501

        self._candidate_info = candidate_info

    @property
    def questions(self):
        """Gets the questions of this GetInterviewDetailsResponseData.  # noqa: E501

        Contains all questions for this interview.  # noqa: E501

        :return: The questions of this GetInterviewDetailsResponseData.  # noqa: E501
        :rtype: list[GetInterviewDetailsResponseDataQuestions]
        """
        return self._questions

    @questions.setter
    def questions(self, questions):
        """Sets the questions of this GetInterviewDetailsResponseData.

        Contains all questions for this interview.  # noqa: E501

        :param questions: The questions of this GetInterviewDetailsResponseData.  # noqa: E501
        :type: list[GetInterviewDetailsResponseDataQuestions]
        """
        if questions is None:
            raise ValueError("Invalid value for `questions`, must not be `None`")  # noqa: E501

        self._questions = questions

    @property
    def interview_details(self):
        """Gets the interview_details of this GetInterviewDetailsResponseData.  # noqa: E501


        :return: The interview_details of this GetInterviewDetailsResponseData.  # noqa: E501
        :rtype: GetInterviewDetailsResponseDataInterviewDetails
        """
        return self._interview_details

    @interview_details.setter
    def interview_details(self, interview_details):
        """Sets the interview_details of this GetInterviewDetailsResponseData.


        :param interview_details: The interview_details of this GetInterviewDetailsResponseData.  # noqa: E501
        :type: GetInterviewDetailsResponseDataInterviewDetails
        """
        if interview_details is None:
            raise ValueError("Invalid value for `interview_details`, must not be `None`")  # noqa: E501

        self._interview_details = interview_details

    @property
    def site_type(self):
        """Gets the site_type of this GetInterviewDetailsResponseData.  # noqa: E501

        This indicates whether job posted variant. If there are multi branding sites example: Parent Company, Child Company.  # noqa: E501

        :return: The site_type of this GetInterviewDetailsResponseData.  # noqa: E501
        :rtype: str
        """
        return self._site_type

    @site_type.setter
    def site_type(self, site_type):
        """Sets the site_type of this GetInterviewDetailsResponseData.

        This indicates whether job posted variant. If there are multi branding sites example: Parent Company, Child Company.  # noqa: E501

        :param site_type: The site_type of this GetInterviewDetailsResponseData.  # noqa: E501
        :type: str
        """
        if site_type is None:
            raise ValueError("Invalid value for `site_type`, must not be `None`")  # noqa: E501

        self._site_type = site_type

    @property
    def locale(self):
        """Gets the locale of this GetInterviewDetailsResponseData.  # noqa: E501

        Job locale.  # noqa: E501

        :return: The locale of this GetInterviewDetailsResponseData.  # noqa: E501
        :rtype: str
        """
        return self._locale

    @locale.setter
    def locale(self, locale):
        """Sets the locale of this GetInterviewDetailsResponseData.

        Job locale.  # noqa: E501

        :param locale: The locale of this GetInterviewDetailsResponseData.  # noqa: E501
        :type: str
        """
        if locale is None:
            raise ValueError("Invalid value for `locale`, must not be `None`")  # noqa: E501

        self._locale = locale

    @property
    def date_created(self):
        """Gets the date_created of this GetInterviewDetailsResponseData.  # noqa: E501

        Date when interview is invited.  # noqa: E501

        :return: The date_created of this GetInterviewDetailsResponseData.  # noqa: E501
        :rtype: int
        """
        return self._date_created

    @date_created.setter
    def date_created(self, date_created):
        """Sets the date_created of this GetInterviewDetailsResponseData.

        Date when interview is invited.  # noqa: E501

        :param date_created: The date_created of this GetInterviewDetailsResponseData.  # noqa: E501
        :type: int
        """
        if date_created is None:
            raise ValueError("Invalid value for `date_created`, must not be `None`")  # noqa: E501

        self._date_created = date_created

    @property
    def last_updated(self):
        """Gets the last_updated of this GetInterviewDetailsResponseData.  # noqa: E501

        Date when last status is updated.  # noqa: E501

        :return: The last_updated of this GetInterviewDetailsResponseData.  # noqa: E501
        :rtype: int
        """
        return self._last_updated

    @last_updated.setter
    def last_updated(self, last_updated):
        """Sets the last_updated of this GetInterviewDetailsResponseData.

        Date when last status is updated.  # noqa: E501

        :param last_updated: The last_updated of this GetInterviewDetailsResponseData.  # noqa: E501
        :type: int
        """
        if last_updated is None:
            raise ValueError("Invalid value for `last_updated`, must not be `None`")  # noqa: E501

        self._last_updated = last_updated

    @property
    def recruiter_details(self):
        """Gets the recruiter_details of this GetInterviewDetailsResponseData.  # noqa: E501


        :return: The recruiter_details of this GetInterviewDetailsResponseData.  # noqa: E501
        :rtype: GetInterviewDetailsResponseDataRecruiterDetails
        """
        return self._recruiter_details

    @recruiter_details.setter
    def recruiter_details(self, recruiter_details):
        """Sets the recruiter_details of this GetInterviewDetailsResponseData.


        :param recruiter_details: The recruiter_details of this GetInterviewDetailsResponseData.  # noqa: E501
        :type: GetInterviewDetailsResponseDataRecruiterDetails
        """
        if recruiter_details is None:
            raise ValueError("Invalid value for `recruiter_details`, must not be `None`")  # noqa: E501

        self._recruiter_details = recruiter_details

    @property
    def invitation_code(self):
        """Gets the invitation_code of this GetInterviewDetailsResponseData.  # noqa: E501

        This is the invitation code of the invited interview.  # noqa: E501

        :return: The invitation_code of this GetInterviewDetailsResponseData.  # noqa: E501
        :rtype: str
        """
        return self._invitation_code

    @invitation_code.setter
    def invitation_code(self, invitation_code):
        """Sets the invitation_code of this GetInterviewDetailsResponseData.

        This is the invitation code of the invited interview.  # noqa: E501

        :param invitation_code: The invitation_code of this GetInterviewDetailsResponseData.  # noqa: E501
        :type: str
        """
        if invitation_code is None:
            raise ValueError("Invalid value for `invitation_code`, must not be `None`")  # noqa: E501

        self._invitation_code = invitation_code

    @property
    def validity_end_date_time_stamp(self):
        """Gets the validity_end_date_time_stamp of this GetInterviewDetailsResponseData.  # noqa: E501

        This is the interview expiry timestamp.  # noqa: E501

        :return: The validity_end_date_time_stamp of this GetInterviewDetailsResponseData.  # noqa: E501
        :rtype: float
        """
        return self._validity_end_date_time_stamp

    @validity_end_date_time_stamp.setter
    def validity_end_date_time_stamp(self, validity_end_date_time_stamp):
        """Sets the validity_end_date_time_stamp of this GetInterviewDetailsResponseData.

        This is the interview expiry timestamp.  # noqa: E501

        :param validity_end_date_time_stamp: The validity_end_date_time_stamp of this GetInterviewDetailsResponseData.  # noqa: E501
        :type: float
        """
        if validity_end_date_time_stamp is None:
            raise ValueError("Invalid value for `validity_end_date_time_stamp`, must not be `None`")  # noqa: E501

        self._validity_end_date_time_stamp = validity_end_date_time_stamp

    @property
    def interview_valid_for_in_days(self):
        """Gets the interview_valid_for_in_days of this GetInterviewDetailsResponseData.  # noqa: E501

        This is the days validity of interview.  # noqa: E501

        :return: The interview_valid_for_in_days of this GetInterviewDetailsResponseData.  # noqa: E501
        :rtype: float
        """
        return self._interview_valid_for_in_days

    @interview_valid_for_in_days.setter
    def interview_valid_for_in_days(self, interview_valid_for_in_days):
        """Sets the interview_valid_for_in_days of this GetInterviewDetailsResponseData.

        This is the days validity of interview.  # noqa: E501

        :param interview_valid_for_in_days: The interview_valid_for_in_days of this GetInterviewDetailsResponseData.  # noqa: E501
        :type: float
        """
        if interview_valid_for_in_days is None:
            raise ValueError("Invalid value for `interview_valid_for_in_days`, must not be `None`")  # noqa: E501

        self._interview_valid_for_in_days = interview_valid_for_in_days

    @property
    def active(self):
        """Gets the active of this GetInterviewDetailsResponseData.  # noqa: E501

        This indicates whether interview is still active. True if active else false.  # noqa: E501

        :return: The active of this GetInterviewDetailsResponseData.  # noqa: E501
        :rtype: bool
        """
        return self._active

    @active.setter
    def active(self, active):
        """Sets the active of this GetInterviewDetailsResponseData.

        This indicates whether interview is still active. True if active else false.  # noqa: E501

        :param active: The active of this GetInterviewDetailsResponseData.  # noqa: E501
        :type: bool
        """
        if active is None:
            raise ValueError("Invalid value for `active`, must not be `None`")  # noqa: E501

        self._active = active

    @property
    def interview_overall_avg_rating(self):
        """Gets the interview_overall_avg_rating of this GetInterviewDetailsResponseData.  # noqa: E501

        This indicates the overall average rating of the interview.  # noqa: E501

        :return: The interview_overall_avg_rating of this GetInterviewDetailsResponseData.  # noqa: E501
        :rtype: float
        """
        return self._interview_overall_avg_rating

    @interview_overall_avg_rating.setter
    def interview_overall_avg_rating(self, interview_overall_avg_rating):
        """Sets the interview_overall_avg_rating of this GetInterviewDetailsResponseData.

        This indicates the overall average rating of the interview.  # noqa: E501

        :param interview_overall_avg_rating: The interview_overall_avg_rating of this GetInterviewDetailsResponseData.  # noqa: E501
        :type: float
        """
        if interview_overall_avg_rating is None:
            raise ValueError("Invalid value for `interview_overall_avg_rating`, must not be `None`")  # noqa: E501

        self._interview_overall_avg_rating = interview_overall_avg_rating

    @property
    def timezone(self):
        """Gets the timezone of this GetInterviewDetailsResponseData.  # noqa: E501

        This is the timezone of the invited interview.  # noqa: E501

        :return: The timezone of this GetInterviewDetailsResponseData.  # noqa: E501
        :rtype: str
        """
        return self._timezone

    @timezone.setter
    def timezone(self, timezone):
        """Sets the timezone of this GetInterviewDetailsResponseData.

        This is the timezone of the invited interview.  # noqa: E501

        :param timezone: The timezone of this GetInterviewDetailsResponseData.  # noqa: E501
        :type: str
        """

        self._timezone = timezone

    @property
    def interview_url(self):
        """Gets the interview_url of this GetInterviewDetailsResponseData.  # noqa: E501

        This is the interview url.  # noqa: E501

        :return: The interview_url of this GetInterviewDetailsResponseData.  # noqa: E501
        :rtype: str
        """
        return self._interview_url

    @interview_url.setter
    def interview_url(self, interview_url):
        """Sets the interview_url of this GetInterviewDetailsResponseData.

        This is the interview url.  # noqa: E501

        :param interview_url: The interview_url of this GetInterviewDetailsResponseData.  # noqa: E501
        :type: str
        """
        if interview_url is None:
            raise ValueError("Invalid value for `interview_url`, must not be `None`")  # noqa: E501

        self._interview_url = interview_url

    @property
    def lc_candidate_name(self):
        """Gets the lc_candidate_name of this GetInterviewDetailsResponseData.  # noqa: E501

        This is the candidate name.  # noqa: E501

        :return: The lc_candidate_name of this GetInterviewDetailsResponseData.  # noqa: E501
        :rtype: str
        """
        return self._lc_candidate_name

    @lc_candidate_name.setter
    def lc_candidate_name(self, lc_candidate_name):
        """Sets the lc_candidate_name of this GetInterviewDetailsResponseData.

        This is the candidate name.  # noqa: E501

        :param lc_candidate_name: The lc_candidate_name of this GetInterviewDetailsResponseData.  # noqa: E501
        :type: str
        """
        if lc_candidate_name is None:
            raise ValueError("Invalid value for `lc_candidate_name`, must not be `None`")  # noqa: E501

        self._lc_candidate_name = lc_candidate_name

    @property
    def questionnaire_id(self):
        """Gets the questionnaire_id of this GetInterviewDetailsResponseData.  # noqa: E501

        This is the questionnaire used for the invitation.  # noqa: E501

        :return: The questionnaire_id of this GetInterviewDetailsResponseData.  # noqa: E501
        :rtype: str
        """
        return self._questionnaire_id

    @questionnaire_id.setter
    def questionnaire_id(self, questionnaire_id):
        """Sets the questionnaire_id of this GetInterviewDetailsResponseData.

        This is the questionnaire used for the invitation.  # noqa: E501

        :param questionnaire_id: The questionnaire_id of this GetInterviewDetailsResponseData.  # noqa: E501
        :type: str
        """
        if questionnaire_id is None:
            raise ValueError("Invalid value for `questionnaire_id`, must not be `None`")  # noqa: E501

        self._questionnaire_id = questionnaire_id

    @property
    def assessment_score(self):
        """Gets the assessment_score of this GetInterviewDetailsResponseData.  # noqa: E501

        This is the score if there any scored questions.  # noqa: E501

        :return: The assessment_score of this GetInterviewDetailsResponseData.  # noqa: E501
        :rtype: float
        """
        return self._assessment_score

    @assessment_score.setter
    def assessment_score(self, assessment_score):
        """Sets the assessment_score of this GetInterviewDetailsResponseData.

        This is the score if there any scored questions.  # noqa: E501

        :param assessment_score: The assessment_score of this GetInterviewDetailsResponseData.  # noqa: E501
        :type: float
        """
        if assessment_score is None:
            raise ValueError("Invalid value for `assessment_score`, must not be `None`")  # noqa: E501

        self._assessment_score = assessment_score

    @property
    def answered_score_points(self):
        """Gets the answered_score_points of this GetInterviewDetailsResponseData.  # noqa: E501

        Answered score points for the selected question options.  # noqa: E501

        :return: The answered_score_points of this GetInterviewDetailsResponseData.  # noqa: E501
        :rtype: float
        """
        return self._answered_score_points

    @answered_score_points.setter
    def answered_score_points(self, answered_score_points):
        """Sets the answered_score_points of this GetInterviewDetailsResponseData.

        Answered score points for the selected question options.  # noqa: E501

        :param answered_score_points: The answered_score_points of this GetInterviewDetailsResponseData.  # noqa: E501
        :type: float
        """
        if answered_score_points is None:
            raise ValueError("Invalid value for `answered_score_points`, must not be `None`")  # noqa: E501

        self._answered_score_points = answered_score_points

    @property
    def max_score_points(self):
        """Gets the max_score_points of this GetInterviewDetailsResponseData.  # noqa: E501

        Max total points.  # noqa: E501

        :return: The max_score_points of this GetInterviewDetailsResponseData.  # noqa: E501
        :rtype: float
        """
        return self._max_score_points

    @max_score_points.setter
    def max_score_points(self, max_score_points):
        """Sets the max_score_points of this GetInterviewDetailsResponseData.

        Max total points.  # noqa: E501

        :param max_score_points: The max_score_points of this GetInterviewDetailsResponseData.  # noqa: E501
        :type: float
        """
        if max_score_points is None:
            raise ValueError("Invalid value for `max_score_points`, must not be `None`")  # noqa: E501

        self._max_score_points = max_score_points

    @property
    def attachment_status(self):
        """Gets the attachment_status of this GetInterviewDetailsResponseData.  # noqa: E501

        True if there is attachment for this question, False otherwise.  # noqa: E501

        :return: The attachment_status of this GetInterviewDetailsResponseData.  # noqa: E501
        :rtype: bool
        """
        return self._attachment_status

    @attachment_status.setter
    def attachment_status(self, attachment_status):
        """Sets the attachment_status of this GetInterviewDetailsResponseData.

        True if there is attachment for this question, False otherwise.  # noqa: E501

        :param attachment_status: The attachment_status of this GetInterviewDetailsResponseData.  # noqa: E501
        :type: bool
        """
        if attachment_status is None:
            raise ValueError("Invalid value for `attachment_status`, must not be `None`")  # noqa: E501

        self._attachment_status = attachment_status

    def to_dict(self):
        """Returns the model properties as a dict"""
        result = {}

        for attr, _ in six.iteritems(self.swagger_types):
            value = getattr(self, attr)
            if isinstance(value, list):
                result[attr] = list(map(
                    lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
                    value
                ))
            elif hasattr(value, "to_dict"):
                result[attr] = value.to_dict()
            elif isinstance(value, dict):
                result[attr] = dict(map(
                    lambda item: (item[0], item[1].to_dict())
                    if hasattr(item[1], "to_dict") else item,
                    value.items()
                ))
            else:
                result[attr] = value
        if issubclass(GetInterviewDetailsResponseData, dict):
            for key, value in self.items():
                result[key] = value

        return result

    def to_str(self):
        """Returns the string representation of the model"""
        return pprint.pformat(self.to_dict())

    def __repr__(self):
        """For `print` and `pprint`"""
        return self.to_str()

    def __eq__(self, other):
        """Returns true if both objects are equal"""
        if not isinstance(other, GetInterviewDetailsResponseData):
            return False

        return self.__dict__ == other.__dict__

    def __ne__(self, other):
        """Returns true if both objects are not equal"""
        return not self == other
