"""
    OpenDota API

    # Introduction The OpenDota API provides Dota 2 related data including advanced match data extracted from match replays.  You can find data that can be used to convert hero and ability IDs and other information provided by the API from the [dotaconstants](https://github.com/odota/dotaconstants) repository.  **Beginning 2018-04-22, the OpenDota API is limited to 50,000 free calls per month and 60 requests/minute** We offer a Premium Tier with unlimited API calls and higher rate limits. Check out the [API page](https://www.opendota.com/api-keys) to learn more.   # noqa: E501

    The version of the OpenAPI document: 18.0.0
    Generated by: https://openapi-generator.tech
"""


import re  # noqa: F401
import sys  # noqa: F401

from python_opendota.model_utils import (  # noqa: F401
    ApiTypeError,
    ModelComposed,
    ModelNormal,
    ModelSimple,
    cached_property,
    change_keys_js_to_python,
    convert_js_args_to_python_args,
    date,
    datetime,
    file_type,
    none_type,
    validate_get_composed_info,
    OpenApiModel
)
from python_opendota.exceptions import ApiAttributeError


def lazy_import():
    from python_opendota.model.match_response_buyback_log import MatchResponseBuybackLog
    from python_opendota.model.match_response_connection_log import MatchResponseConnectionLog
    from python_opendota.model.match_response_kills_log import MatchResponseKillsLog
    from python_opendota.model.match_response_purchase_log import MatchResponsePurchaseLog
    from python_opendota.model.match_response_runes_log import MatchResponseRunesLog
    globals()['MatchResponseBuybackLog'] = MatchResponseBuybackLog
    globals()['MatchResponseConnectionLog'] = MatchResponseConnectionLog
    globals()['MatchResponseKillsLog'] = MatchResponseKillsLog
    globals()['MatchResponsePurchaseLog'] = MatchResponsePurchaseLog
    globals()['MatchResponseRunesLog'] = MatchResponseRunesLog


class MatchResponsePlayers(ModelNormal):
    """NOTE: This class is auto generated by OpenAPI Generator.
    Ref: https://openapi-generator.tech

    Do not edit the class manually.

    Attributes:
      allowed_values (dict): The key is the tuple path to the attribute
          and the for var_name this is (var_name,). The value is a dict
          with a capitalized key describing the allowed value and an allowed
          value. These dicts store the allowed enum values.
      attribute_map (dict): The key is attribute name
          and the value is json key in definition.
      discriminator_value_class_map (dict): A dict to go from the discriminator
          variable value to the discriminator class name.
      validations (dict): The key is the tuple path to the attribute
          and the for var_name this is (var_name,). The value is a dict
          that stores validations for max_length, min_length, max_items,
          min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
          inclusive_minimum, and regex.
      additional_properties_type (tuple): A tuple of classes accepted
          as additional properties values.
    """

    allowed_values = {
    }

    validations = {
    }

    @cached_property
    def additional_properties_type():
        """
        This must be a method because a model may have properties that are
        of type self, this must run after the class is loaded
        """
        lazy_import()
        return (bool, date, datetime, dict, float, int, list, str, none_type,)  # noqa: E501

    _nullable = False

    @cached_property
    def openapi_types():
        """
        This must be a method because a model may have properties that are
        of type self, this must run after the class is loaded

        Returns
            openapi_types (dict): The key is attribute name
                and the value is attribute type.
        """
        lazy_import()
        return {
            'match_id': (int,),  # noqa: E501
            'player_slot': (int,),  # noqa: E501
            'ability_upgrades_arr': ([int],),  # noqa: E501
            'ability_uses': (bool, date, datetime, dict, float, int, list, str, none_type,),  # noqa: E501
            'ability_targets': (bool, date, datetime, dict, float, int, list, str, none_type,),  # noqa: E501
            'damage_targets': (bool, date, datetime, dict, float, int, list, str, none_type,),  # noqa: E501
            'account_id': (int,),  # noqa: E501
            'actions': (bool, date, datetime, dict, float, int, list, str, none_type,),  # noqa: E501
            'additional_units': (bool, date, datetime, dict, float, int, list, str, none_type,),  # noqa: E501
            'assists': (int,),  # noqa: E501
            'backpack_0': (int,),  # noqa: E501
            'backpack_1': (int,),  # noqa: E501
            'backpack_2': (int,),  # noqa: E501
            'buyback_log': ([MatchResponseBuybackLog],),  # noqa: E501
            'camps_stacked': (int,),  # noqa: E501
            'connection_log': ([MatchResponseConnectionLog],),  # noqa: E501
            'creeps_stacked': (int,),  # noqa: E501
            'damage': (bool, date, datetime, dict, float, int, list, str, none_type,),  # noqa: E501
            'damage_inflictor': (bool, date, datetime, dict, float, int, list, str, none_type,),  # noqa: E501
            'damage_inflictor_received': (bool, date, datetime, dict, float, int, list, str, none_type,),  # noqa: E501
            'damage_taken': (bool, date, datetime, dict, float, int, list, str, none_type,),  # noqa: E501
            'deaths': (int,),  # noqa: E501
            'denies': (int,),  # noqa: E501
            'dn_t': ([int],),  # noqa: E501
            'gold': (int,),  # noqa: E501
            'gold_per_min': (int,),  # noqa: E501
            'gold_reasons': (bool, date, datetime, dict, float, int, list, str, none_type,),  # noqa: E501
            'gold_spent': (int,),  # noqa: E501
            'gold_t': ([int],),  # noqa: E501
            'hero_damage': (int,),  # noqa: E501
            'hero_healing': (int,),  # noqa: E501
            'hero_hits': (bool, date, datetime, dict, float, int, list, str, none_type,),  # noqa: E501
            'hero_id': (int,),  # noqa: E501
            'item_0': (int,),  # noqa: E501
            'item_1': (int,),  # noqa: E501
            'item_2': (int,),  # noqa: E501
            'item_3': (int,),  # noqa: E501
            'item_4': (int,),  # noqa: E501
            'item_5': (int,),  # noqa: E501
            'item_uses': (bool, date, datetime, dict, float, int, list, str, none_type,),  # noqa: E501
            'kill_streaks': (bool, date, datetime, dict, float, int, list, str, none_type,),  # noqa: E501
            'killed': (bool, date, datetime, dict, float, int, list, str, none_type,),  # noqa: E501
            'killed_by': (bool, date, datetime, dict, float, int, list, str, none_type,),  # noqa: E501
            'kills': (int,),  # noqa: E501
            'kills_log': ([MatchResponseKillsLog],),  # noqa: E501
            'lane_pos': (bool, date, datetime, dict, float, int, list, str, none_type,),  # noqa: E501
            'last_hits': (int,),  # noqa: E501
            'leaver_status': (int,),  # noqa: E501
            'level': (int,),  # noqa: E501
            'lh_t': ([int],),  # noqa: E501
            'life_state': (bool, date, datetime, dict, float, int, list, str, none_type,),  # noqa: E501
            'max_hero_hit': (bool, date, datetime, dict, float, int, list, str, none_type,),  # noqa: E501
            'multi_kills': (bool, date, datetime, dict, float, int, list, str, none_type,),  # noqa: E501
            'obs': (bool, date, datetime, dict, float, int, list, str, none_type,),  # noqa: E501
            'obs_left_log': ([bool, date, datetime, dict, float, int, list, str, none_type],),  # noqa: E501
            'obs_log': ([bool, date, datetime, dict, float, int, list, str, none_type],),  # noqa: E501
            'obs_placed': (int,),  # noqa: E501
            'party_id': (int,),  # noqa: E501
            'permanent_buffs': ([bool, date, datetime, dict, float, int, list, str, none_type],),  # noqa: E501
            'pings': (int,),  # noqa: E501
            'purchase': (bool, date, datetime, dict, float, int, list, str, none_type,),  # noqa: E501
            'purchase_log': ([MatchResponsePurchaseLog],),  # noqa: E501
            'rune_pickups': (int,),  # noqa: E501
            'runes': ({str: (int,)},),  # noqa: E501
            'runes_log': ([MatchResponseRunesLog],),  # noqa: E501
            'sen': (bool, date, datetime, dict, float, int, list, str, none_type,),  # noqa: E501
            'sen_left_log': ([bool, date, datetime, dict, float, int, list, str, none_type],),  # noqa: E501
            'sen_log': ([bool, date, datetime, dict, float, int, list, str, none_type],),  # noqa: E501
            'sen_placed': (int,),  # noqa: E501
            'stuns': (float,),  # noqa: E501
            'times': ([int],),  # noqa: E501
            'tower_damage': (int,),  # noqa: E501
            'xp_per_min': (int,),  # noqa: E501
            'xp_reasons': (bool, date, datetime, dict, float, int, list, str, none_type,),  # noqa: E501
            'xp_t': ([int],),  # noqa: E501
            'personaname': (str,),  # noqa: E501
            'name': (str,),  # noqa: E501
            'last_login': (datetime,),  # noqa: E501
            'radiant_win': (bool,),  # noqa: E501
            'start_time': (int,),  # noqa: E501
            'duration': (int,),  # noqa: E501
            'cluster': (int,),  # noqa: E501
            'lobby_type': (int,),  # noqa: E501
            'game_mode': (int,),  # noqa: E501
            'patch': (int,),  # noqa: E501
            'region': (int,),  # noqa: E501
            'is_radiant': (bool,),  # noqa: E501
            'win': (int,),  # noqa: E501
            'lose': (int,),  # noqa: E501
            'total_gold': (int,),  # noqa: E501
            'total_xp': (int,),  # noqa: E501
            'kills_per_min': (float,),  # noqa: E501
            'kda': (float,),  # noqa: E501
            'abandons': (int,),  # noqa: E501
            'neutral_kills': (int,),  # noqa: E501
            'tower_kills': (int,),  # noqa: E501
            'courier_kills': (int,),  # noqa: E501
            'lane_kills': (int,),  # noqa: E501
            'hero_kills': (int,),  # noqa: E501
            'observer_kills': (int,),  # noqa: E501
            'sentry_kills': (int,),  # noqa: E501
            'roshan_kills': (int,),  # noqa: E501
            'necronomicon_kills': (int,),  # noqa: E501
            'ancient_kills': (int,),  # noqa: E501
            'buyback_count': (int,),  # noqa: E501
            'observer_uses': (int,),  # noqa: E501
            'sentry_uses': (int,),  # noqa: E501
            'lane_efficiency': (float,),  # noqa: E501
            'lane_efficiency_pct': (float,),  # noqa: E501
            'lane': (int,),  # noqa: E501
            'lane_role': (int,),  # noqa: E501
            'is_roaming': (bool,),  # noqa: E501
            'purchase_time': (bool, date, datetime, dict, float, int, list, str, none_type,),  # noqa: E501
            'first_purchase_time': (bool, date, datetime, dict, float, int, list, str, none_type,),  # noqa: E501
            'item_win': (bool, date, datetime, dict, float, int, list, str, none_type,),  # noqa: E501
            'item_usage': (bool, date, datetime, dict, float, int, list, str, none_type,),  # noqa: E501
            'purchase_tpscroll': (bool, date, datetime, dict, float, int, list, str, none_type,),  # noqa: E501
            'actions_per_min': (int,),  # noqa: E501
            'life_state_dead': (int,),  # noqa: E501
            'rank_tier': (int,),  # noqa: E501
            'cosmetics': ([int],),  # noqa: E501
            'benchmarks': (bool, date, datetime, dict, float, int, list, str, none_type,),  # noqa: E501
        }

    @cached_property
    def discriminator():
        return None


    attribute_map = {
        'match_id': 'match_id',  # noqa: E501
        'player_slot': 'player_slot',  # noqa: E501
        'ability_upgrades_arr': 'ability_upgrades_arr',  # noqa: E501
        'ability_uses': 'ability_uses',  # noqa: E501
        'ability_targets': 'ability_targets',  # noqa: E501
        'damage_targets': 'damage_targets',  # noqa: E501
        'account_id': 'account_id',  # noqa: E501
        'actions': 'actions',  # noqa: E501
        'additional_units': 'additional_units',  # noqa: E501
        'assists': 'assists',  # noqa: E501
        'backpack_0': 'backpack_0',  # noqa: E501
        'backpack_1': 'backpack_1',  # noqa: E501
        'backpack_2': 'backpack_2',  # noqa: E501
        'buyback_log': 'buyback_log',  # noqa: E501
        'camps_stacked': 'camps_stacked',  # noqa: E501
        'connection_log': 'connection_log',  # noqa: E501
        'creeps_stacked': 'creeps_stacked',  # noqa: E501
        'damage': 'damage',  # noqa: E501
        'damage_inflictor': 'damage_inflictor',  # noqa: E501
        'damage_inflictor_received': 'damage_inflictor_received',  # noqa: E501
        'damage_taken': 'damage_taken',  # noqa: E501
        'deaths': 'deaths',  # noqa: E501
        'denies': 'denies',  # noqa: E501
        'dn_t': 'dn_t',  # noqa: E501
        'gold': 'gold',  # noqa: E501
        'gold_per_min': 'gold_per_min',  # noqa: E501
        'gold_reasons': 'gold_reasons',  # noqa: E501
        'gold_spent': 'gold_spent',  # noqa: E501
        'gold_t': 'gold_t',  # noqa: E501
        'hero_damage': 'hero_damage',  # noqa: E501
        'hero_healing': 'hero_healing',  # noqa: E501
        'hero_hits': 'hero_hits',  # noqa: E501
        'hero_id': 'hero_id',  # noqa: E501
        'item_0': 'item_0',  # noqa: E501
        'item_1': 'item_1',  # noqa: E501
        'item_2': 'item_2',  # noqa: E501
        'item_3': 'item_3',  # noqa: E501
        'item_4': 'item_4',  # noqa: E501
        'item_5': 'item_5',  # noqa: E501
        'item_uses': 'item_uses',  # noqa: E501
        'kill_streaks': 'kill_streaks',  # noqa: E501
        'killed': 'killed',  # noqa: E501
        'killed_by': 'killed_by',  # noqa: E501
        'kills': 'kills',  # noqa: E501
        'kills_log': 'kills_log',  # noqa: E501
        'lane_pos': 'lane_pos',  # noqa: E501
        'last_hits': 'last_hits',  # noqa: E501
        'leaver_status': 'leaver_status',  # noqa: E501
        'level': 'level',  # noqa: E501
        'lh_t': 'lh_t',  # noqa: E501
        'life_state': 'life_state',  # noqa: E501
        'max_hero_hit': 'max_hero_hit',  # noqa: E501
        'multi_kills': 'multi_kills',  # noqa: E501
        'obs': 'obs',  # noqa: E501
        'obs_left_log': 'obs_left_log',  # noqa: E501
        'obs_log': 'obs_log',  # noqa: E501
        'obs_placed': 'obs_placed',  # noqa: E501
        'party_id': 'party_id',  # noqa: E501
        'permanent_buffs': 'permanent_buffs',  # noqa: E501
        'pings': 'pings',  # noqa: E501
        'purchase': 'purchase',  # noqa: E501
        'purchase_log': 'purchase_log',  # noqa: E501
        'rune_pickups': 'rune_pickups',  # noqa: E501
        'runes': 'runes',  # noqa: E501
        'runes_log': 'runes_log',  # noqa: E501
        'sen': 'sen',  # noqa: E501
        'sen_left_log': 'sen_left_log',  # noqa: E501
        'sen_log': 'sen_log',  # noqa: E501
        'sen_placed': 'sen_placed',  # noqa: E501
        'stuns': 'stuns',  # noqa: E501
        'times': 'times',  # noqa: E501
        'tower_damage': 'tower_damage',  # noqa: E501
        'xp_per_min': 'xp_per_min',  # noqa: E501
        'xp_reasons': 'xp_reasons',  # noqa: E501
        'xp_t': 'xp_t',  # noqa: E501
        'personaname': 'personaname',  # noqa: E501
        'name': 'name',  # noqa: E501
        'last_login': 'last_login',  # noqa: E501
        'radiant_win': 'radiant_win',  # noqa: E501
        'start_time': 'start_time',  # noqa: E501
        'duration': 'duration',  # noqa: E501
        'cluster': 'cluster',  # noqa: E501
        'lobby_type': 'lobby_type',  # noqa: E501
        'game_mode': 'game_mode',  # noqa: E501
        'patch': 'patch',  # noqa: E501
        'region': 'region',  # noqa: E501
        'is_radiant': 'isRadiant',  # noqa: E501
        'win': 'win',  # noqa: E501
        'lose': 'lose',  # noqa: E501
        'total_gold': 'total_gold',  # noqa: E501
        'total_xp': 'total_xp',  # noqa: E501
        'kills_per_min': 'kills_per_min',  # noqa: E501
        'kda': 'kda',  # noqa: E501
        'abandons': 'abandons',  # noqa: E501
        'neutral_kills': 'neutral_kills',  # noqa: E501
        'tower_kills': 'tower_kills',  # noqa: E501
        'courier_kills': 'courier_kills',  # noqa: E501
        'lane_kills': 'lane_kills',  # noqa: E501
        'hero_kills': 'hero_kills',  # noqa: E501
        'observer_kills': 'observer_kills',  # noqa: E501
        'sentry_kills': 'sentry_kills',  # noqa: E501
        'roshan_kills': 'roshan_kills',  # noqa: E501
        'necronomicon_kills': 'necronomicon_kills',  # noqa: E501
        'ancient_kills': 'ancient_kills',  # noqa: E501
        'buyback_count': 'buyback_count',  # noqa: E501
        'observer_uses': 'observer_uses',  # noqa: E501
        'sentry_uses': 'sentry_uses',  # noqa: E501
        'lane_efficiency': 'lane_efficiency',  # noqa: E501
        'lane_efficiency_pct': 'lane_efficiency_pct',  # noqa: E501
        'lane': 'lane',  # noqa: E501
        'lane_role': 'lane_role',  # noqa: E501
        'is_roaming': 'is_roaming',  # noqa: E501
        'purchase_time': 'purchase_time',  # noqa: E501
        'first_purchase_time': 'first_purchase_time',  # noqa: E501
        'item_win': 'item_win',  # noqa: E501
        'item_usage': 'item_usage',  # noqa: E501
        'purchase_tpscroll': 'purchase_tpscroll',  # noqa: E501
        'actions_per_min': 'actions_per_min',  # noqa: E501
        'life_state_dead': 'life_state_dead',  # noqa: E501
        'rank_tier': 'rank_tier',  # noqa: E501
        'cosmetics': 'cosmetics',  # noqa: E501
        'benchmarks': 'benchmarks',  # noqa: E501
    }

    read_only_vars = {
    }

    _composed_schemas = {}

    @classmethod
    @convert_js_args_to_python_args
    def _from_openapi_data(cls, *args, **kwargs):  # noqa: E501
        """MatchResponsePlayers - a model defined in OpenAPI

        Keyword Args:
            _check_type (bool): if True, values for parameters in openapi_types
                                will be type checked and a TypeError will be
                                raised if the wrong type is input.
                                Defaults to True
            _path_to_item (tuple/list): This is a list of keys or values to
                                drill down to the model in received_data
                                when deserializing a response
            _spec_property_naming (bool): True if the variable names in the input data
                                are serialized names, as specified in the OpenAPI document.
                                False if the variable names in the input data
                                are pythonic names, e.g. snake case (default)
            _configuration (Configuration): the instance to use when
                                deserializing a file_type parameter.
                                If passed, type conversion is attempted
                                If omitted no type conversion is done.
            _visited_composed_classes (tuple): This stores a tuple of
                                classes that we have traveled through so that
                                if we see that class again we will not use its
                                discriminator again.
                                When traveling through a discriminator, the
                                composed schema that is
                                is traveled through is added to this set.
                                For example if Animal has a discriminator
                                petType and we pass in "Dog", and the class Dog
                                allOf includes Animal, we move through Animal
                                once using the discriminator, and pick Dog.
                                Then in Dog, we will make an instance of the
                                Animal class but this time we won't travel
                                through its discriminator because we passed in
                                _visited_composed_classes = (Animal,)
            match_id (int): Match ID. [optional]  # noqa: E501
            player_slot (int): Which slot the player is in. 0-127 are Radiant, 128-255 are Dire. [optional]  # noqa: E501
            ability_upgrades_arr ([int]): An array describing how abilities were upgraded. [optional]  # noqa: E501
            ability_uses (bool, date, datetime, dict, float, int, list, str, none_type): Object containing information on how many times the played used their abilities. [optional]  # noqa: E501
            ability_targets (bool, date, datetime, dict, float, int, list, str, none_type): Object containing information on who the player used their abilities on. [optional]  # noqa: E501
            damage_targets (bool, date, datetime, dict, float, int, list, str, none_type): Object containing information on how and how much damage the player dealt to other heroes. [optional]  # noqa: E501
            account_id (int): account_id. [optional]  # noqa: E501
            actions (bool, date, datetime, dict, float, int, list, str, none_type): Object containing information on how many and what type of actions the player issued to their hero. [optional]  # noqa: E501
            additional_units (bool, date, datetime, dict, float, int, list, str, none_type): Object containing information on additional units the player had under their control. [optional]  # noqa: E501
            assists (int): Number of assists the player had. [optional]  # noqa: E501
            backpack_0 (int): Item in backpack slot 0. [optional]  # noqa: E501
            backpack_1 (int): Item in backpack slot 1. [optional]  # noqa: E501
            backpack_2 (int): Item in backpack slot 2. [optional]  # noqa: E501
            buyback_log ([MatchResponseBuybackLog]): Array containing information about buybacks. [optional]  # noqa: E501
            camps_stacked (int): Number of camps stacked. [optional]  # noqa: E501
            connection_log ([MatchResponseConnectionLog]): Array containing information about the player's disconnections and reconnections. [optional]  # noqa: E501
            creeps_stacked (int): Number of creeps stacked. [optional]  # noqa: E501
            damage (bool, date, datetime, dict, float, int, list, str, none_type): Object containing information about damage dealt by the player to different units. [optional]  # noqa: E501
            damage_inflictor (bool, date, datetime, dict, float, int, list, str, none_type): Object containing information about about the sources of this player's damage to heroes. [optional]  # noqa: E501
            damage_inflictor_received (bool, date, datetime, dict, float, int, list, str, none_type): Object containing information about the sources of damage received by this player from heroes. [optional]  # noqa: E501
            damage_taken (bool, date, datetime, dict, float, int, list, str, none_type): Object containing information about from whom the player took damage. [optional]  # noqa: E501
            deaths (int): Number of deaths. [optional]  # noqa: E501
            denies (int): Number of denies. [optional]  # noqa: E501
            dn_t ([int]): Array containing number of denies at different times of the match. [optional]  # noqa: E501
            gold (int): Gold at the end of the game. [optional]  # noqa: E501
            gold_per_min (int): Gold Per Minute obtained by this player. [optional]  # noqa: E501
            gold_reasons (bool, date, datetime, dict, float, int, list, str, none_type): Object containing information on how the player gainined gold over the course of the match. [optional]  # noqa: E501
            gold_spent (int): How much gold the player spent. [optional]  # noqa: E501
            gold_t ([int]): Array containing total gold at different times of the match. [optional]  # noqa: E501
            hero_damage (int): Hero Damage Dealt. [optional]  # noqa: E501
            hero_healing (int): Hero Healing Done. [optional]  # noqa: E501
            hero_hits (bool, date, datetime, dict, float, int, list, str, none_type): Object containing information on how many ticks of damages the hero inflicted with different spells and damage inflictors. [optional]  # noqa: E501
            hero_id (int): The ID value of the hero played. [optional]  # noqa: E501
            item_0 (int): Item in the player's first slot. [optional]  # noqa: E501
            item_1 (int): Item in the player's second slot. [optional]  # noqa: E501
            item_2 (int): Item in the player's third slot. [optional]  # noqa: E501
            item_3 (int): Item in the player's fourth slot. [optional]  # noqa: E501
            item_4 (int): Item in the player's fifth slot. [optional]  # noqa: E501
            item_5 (int): Item in the player's sixth slot. [optional]  # noqa: E501
            item_uses (bool, date, datetime, dict, float, int, list, str, none_type): Object containing information about how many times a player used items. [optional]  # noqa: E501
            kill_streaks (bool, date, datetime, dict, float, int, list, str, none_type): Object containing information about the player's killstreaks. [optional]  # noqa: E501
            killed (bool, date, datetime, dict, float, int, list, str, none_type): Object containing information about what units the player killed. [optional]  # noqa: E501
            killed_by (bool, date, datetime, dict, float, int, list, str, none_type): Object containing information about who killed the player. [optional]  # noqa: E501
            kills (int): Number of kills. [optional]  # noqa: E501
            kills_log ([MatchResponseKillsLog]): Array containing information on which hero the player killed at what time. [optional]  # noqa: E501
            lane_pos (bool, date, datetime, dict, float, int, list, str, none_type): Object containing information on lane position. [optional]  # noqa: E501
            last_hits (int): Number of last hits. [optional]  # noqa: E501
            leaver_status (int): Integer describing whether or not the player left the game. 0: didn't leave. 1: left safely. 2+: Abandoned. [optional]  # noqa: E501
            level (int): Level at the end of the game. [optional]  # noqa: E501
            lh_t ([int]): Array describing last hits at each minute in the game. [optional]  # noqa: E501
            life_state (bool, date, datetime, dict, float, int, list, str, none_type): life_state. [optional]  # noqa: E501
            max_hero_hit (bool, date, datetime, dict, float, int, list, str, none_type): Object with information on the highest damage instance the player inflicted. [optional]  # noqa: E501
            multi_kills (bool, date, datetime, dict, float, int, list, str, none_type): Object with information on the number of the number of multikills the player had. [optional]  # noqa: E501
            obs (bool, date, datetime, dict, float, int, list, str, none_type): Object with information on where the player placed observer wards. The location takes the form (outer number, inner number) and are from ~64-192.. [optional]  # noqa: E501
            obs_left_log ([bool, date, datetime, dict, float, int, list, str, none_type]): obs_left_log. [optional]  # noqa: E501
            obs_log ([bool, date, datetime, dict, float, int, list, str, none_type]): Object containing information on when and where the player placed observer wards. [optional]  # noqa: E501
            obs_placed (int): Total number of observer wards placed. [optional]  # noqa: E501
            party_id (int): party_id. [optional]  # noqa: E501
            permanent_buffs ([bool, date, datetime, dict, float, int, list, str, none_type]): Array describing permanent buffs the player had at the end of the game. List of constants can be found here: https://github.com/odota/dotaconstants/blob/master/json/permanent_buffs.json. [optional]  # noqa: E501
            pings (int): Total number of pings. [optional]  # noqa: E501
            purchase (bool, date, datetime, dict, float, int, list, str, none_type): Object containing information on the items the player purchased. [optional]  # noqa: E501
            purchase_log ([MatchResponsePurchaseLog]): Object containing information on when items were purchased. [optional]  # noqa: E501
            rune_pickups (int): Number of runes picked up. [optional]  # noqa: E501
            runes ({str: (int,)}): Object with information about which runes the player picked up. [optional]  # noqa: E501
            runes_log ([MatchResponseRunesLog]): Array with information on when runes were picked up. [optional]  # noqa: E501
            sen (bool, date, datetime, dict, float, int, list, str, none_type): Object with information on where sentries were placed. The location takes the form (outer number, inner number) and are from ~64-192.. [optional]  # noqa: E501
            sen_left_log ([bool, date, datetime, dict, float, int, list, str, none_type]): Array containing information on when and where the player placed sentries. [optional]  # noqa: E501
            sen_log ([bool, date, datetime, dict, float, int, list, str, none_type]): Array with information on when and where sentries were placed by the player. [optional]  # noqa: E501
            sen_placed (int): How many sentries were placed by the player. [optional]  # noqa: E501
            stuns (float): Total stun duration of all stuns by the player. [optional]  # noqa: E501
            times ([int]): Time in seconds corresponding to the time of entries of other arrays in the match.. [optional]  # noqa: E501
            tower_damage (int): Total tower damage done by the player. [optional]  # noqa: E501
            xp_per_min (int): Experience Per Minute obtained by the player. [optional]  # noqa: E501
            xp_reasons (bool, date, datetime, dict, float, int, list, str, none_type): Object containing information on the sources of this player's experience. [optional]  # noqa: E501
            xp_t ([int]): Experience at each minute of the game. [optional]  # noqa: E501
            personaname (str): personaname. [optional]  # noqa: E501
            name (str): name. [optional]  # noqa: E501
            last_login (datetime): Time of player's last login. [optional]  # noqa: E501
            radiant_win (bool): Boolean indicating whether Radiant won the match. [optional]  # noqa: E501
            start_time (int): Start time of the match in seconds since 1970. [optional]  # noqa: E501
            duration (int): Duration of the game in seconds. [optional]  # noqa: E501
            cluster (int): cluster. [optional]  # noqa: E501
            lobby_type (int): Integer corresponding to lobby type of match. List of constants can be found here: https://github.com/odota/dotaconstants/blob/master/json/lobby_type.json. [optional]  # noqa: E501
            game_mode (int): Integer corresponding to game mode played. List of constants can be found here: https://github.com/odota/dotaconstants/blob/master/json/game_mode.json. [optional]  # noqa: E501
            patch (int): Integer representing the patch the game was played on. [optional]  # noqa: E501
            region (int): Integer corresponding to the region the game was played on. [optional]  # noqa: E501
            is_radiant (bool): Boolean for whether or not the player is on Radiant. [optional]  # noqa: E501
            win (int): Binary integer representing whether or not the player won. [optional]  # noqa: E501
            lose (int): Binary integer representing whether or not the player lost. [optional]  # noqa: E501
            total_gold (int): Total gold at the end of the game. [optional]  # noqa: E501
            total_xp (int): Total experience at the end of the game. [optional]  # noqa: E501
            kills_per_min (float): Number of kills per minute. [optional]  # noqa: E501
            kda (float): kda. [optional]  # noqa: E501
            abandons (int): abandons. [optional]  # noqa: E501
            neutral_kills (int): Total number of neutral creeps killed. [optional]  # noqa: E501
            tower_kills (int): Total number of tower kills the player had. [optional]  # noqa: E501
            courier_kills (int): Total number of courier kills the player had. [optional]  # noqa: E501
            lane_kills (int): Total number of lane creeps killed by the player. [optional]  # noqa: E501
            hero_kills (int): Total number of heroes killed by the player. [optional]  # noqa: E501
            observer_kills (int): Total number of observer wards killed by the player. [optional]  # noqa: E501
            sentry_kills (int): Total number of sentry wards killed by the player. [optional]  # noqa: E501
            roshan_kills (int): Total number of roshan kills (last hit on roshan) the player had. [optional]  # noqa: E501
            necronomicon_kills (int): Total number of Necronomicon creeps killed by the player. [optional]  # noqa: E501
            ancient_kills (int): Total number of Ancient creeps killed by the player. [optional]  # noqa: E501
            buyback_count (int): Total number of buyback the player used. [optional]  # noqa: E501
            observer_uses (int): Number of observer wards used. [optional]  # noqa: E501
            sentry_uses (int): Number of sentry wards used. [optional]  # noqa: E501
            lane_efficiency (float): lane_efficiency. [optional]  # noqa: E501
            lane_efficiency_pct (float): lane_efficiency_pct. [optional]  # noqa: E501
            lane (int): Integer referring to which lane the hero laned in. [optional]  # noqa: E501
            lane_role (int): lane_role. [optional]  # noqa: E501
            is_roaming (bool): Boolean referring to whether or not the player roamed. [optional]  # noqa: E501
            purchase_time (bool, date, datetime, dict, float, int, list, str, none_type): Object with information on when the player last purchased an item. [optional]  # noqa: E501
            first_purchase_time (bool, date, datetime, dict, float, int, list, str, none_type): Object with information on when the player first puchased an item. [optional]  # noqa: E501
            item_win (bool, date, datetime, dict, float, int, list, str, none_type): Object with information on whether or not the item won. [optional]  # noqa: E501
            item_usage (bool, date, datetime, dict, float, int, list, str, none_type): Object containing binary integers the tell whether the item was purchased by the player (note: this is always 1). [optional]  # noqa: E501
            purchase_tpscroll (bool, date, datetime, dict, float, int, list, str, none_type): Total number of TP scrolls purchased by the player. [optional]  # noqa: E501
            actions_per_min (int): Actions per minute. [optional]  # noqa: E501
            life_state_dead (int): life_state_dead. [optional]  # noqa: E501
            rank_tier (int): The rank tier of the player. Tens place indicates rank, ones place indicates stars.. [optional]  # noqa: E501
            cosmetics ([int]): cosmetics. [optional]  # noqa: E501
            benchmarks (bool, date, datetime, dict, float, int, list, str, none_type): Object containing information on certain benchmarks like GPM, XPM, KDA, tower damage, etc. [optional]  # noqa: E501
        """

        _check_type = kwargs.pop('_check_type', True)
        _spec_property_naming = kwargs.pop('_spec_property_naming', True)
        _path_to_item = kwargs.pop('_path_to_item', ())
        _configuration = kwargs.pop('_configuration', None)
        _visited_composed_classes = kwargs.pop('_visited_composed_classes', ())

        self = super(OpenApiModel, cls).__new__(cls)

        if args:
            for arg in args:
                if isinstance(arg, dict):
                    kwargs.update(arg)
                else:
                    raise ApiTypeError(
                        "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
                            args,
                            self.__class__.__name__,
                        ),
                        path_to_item=_path_to_item,
                        valid_classes=(self.__class__,),
                    )

        self._data_store = {}
        self._check_type = _check_type
        self._spec_property_naming = _spec_property_naming
        self._path_to_item = _path_to_item
        self._configuration = _configuration
        self._visited_composed_classes = _visited_composed_classes + (self.__class__,)

        for var_name, var_value in kwargs.items():
            if var_name not in self.attribute_map and \
                        self._configuration is not None and \
                        self._configuration.discard_unknown_keys and \
                        self.additional_properties_type is None:
                # discard variable.
                continue
            setattr(self, var_name, var_value)
        return self

    required_properties = set([
        '_data_store',
        '_check_type',
        '_spec_property_naming',
        '_path_to_item',
        '_configuration',
        '_visited_composed_classes',
    ])

    @convert_js_args_to_python_args
    def __init__(self, *args, **kwargs):  # noqa: E501
        """MatchResponsePlayers - a model defined in OpenAPI

        Keyword Args:
            _check_type (bool): if True, values for parameters in openapi_types
                                will be type checked and a TypeError will be
                                raised if the wrong type is input.
                                Defaults to True
            _path_to_item (tuple/list): This is a list of keys or values to
                                drill down to the model in received_data
                                when deserializing a response
            _spec_property_naming (bool): True if the variable names in the input data
                                are serialized names, as specified in the OpenAPI document.
                                False if the variable names in the input data
                                are pythonic names, e.g. snake case (default)
            _configuration (Configuration): the instance to use when
                                deserializing a file_type parameter.
                                If passed, type conversion is attempted
                                If omitted no type conversion is done.
            _visited_composed_classes (tuple): This stores a tuple of
                                classes that we have traveled through so that
                                if we see that class again we will not use its
                                discriminator again.
                                When traveling through a discriminator, the
                                composed schema that is
                                is traveled through is added to this set.
                                For example if Animal has a discriminator
                                petType and we pass in "Dog", and the class Dog
                                allOf includes Animal, we move through Animal
                                once using the discriminator, and pick Dog.
                                Then in Dog, we will make an instance of the
                                Animal class but this time we won't travel
                                through its discriminator because we passed in
                                _visited_composed_classes = (Animal,)
            match_id (int): Match ID. [optional]  # noqa: E501
            player_slot (int): Which slot the player is in. 0-127 are Radiant, 128-255 are Dire. [optional]  # noqa: E501
            ability_upgrades_arr ([int]): An array describing how abilities were upgraded. [optional]  # noqa: E501
            ability_uses (bool, date, datetime, dict, float, int, list, str, none_type): Object containing information on how many times the played used their abilities. [optional]  # noqa: E501
            ability_targets (bool, date, datetime, dict, float, int, list, str, none_type): Object containing information on who the player used their abilities on. [optional]  # noqa: E501
            damage_targets (bool, date, datetime, dict, float, int, list, str, none_type): Object containing information on how and how much damage the player dealt to other heroes. [optional]  # noqa: E501
            account_id (int): account_id. [optional]  # noqa: E501
            actions (bool, date, datetime, dict, float, int, list, str, none_type): Object containing information on how many and what type of actions the player issued to their hero. [optional]  # noqa: E501
            additional_units (bool, date, datetime, dict, float, int, list, str, none_type): Object containing information on additional units the player had under their control. [optional]  # noqa: E501
            assists (int): Number of assists the player had. [optional]  # noqa: E501
            backpack_0 (int): Item in backpack slot 0. [optional]  # noqa: E501
            backpack_1 (int): Item in backpack slot 1. [optional]  # noqa: E501
            backpack_2 (int): Item in backpack slot 2. [optional]  # noqa: E501
            buyback_log ([MatchResponseBuybackLog]): Array containing information about buybacks. [optional]  # noqa: E501
            camps_stacked (int): Number of camps stacked. [optional]  # noqa: E501
            connection_log ([MatchResponseConnectionLog]): Array containing information about the player's disconnections and reconnections. [optional]  # noqa: E501
            creeps_stacked (int): Number of creeps stacked. [optional]  # noqa: E501
            damage (bool, date, datetime, dict, float, int, list, str, none_type): Object containing information about damage dealt by the player to different units. [optional]  # noqa: E501
            damage_inflictor (bool, date, datetime, dict, float, int, list, str, none_type): Object containing information about about the sources of this player's damage to heroes. [optional]  # noqa: E501
            damage_inflictor_received (bool, date, datetime, dict, float, int, list, str, none_type): Object containing information about the sources of damage received by this player from heroes. [optional]  # noqa: E501
            damage_taken (bool, date, datetime, dict, float, int, list, str, none_type): Object containing information about from whom the player took damage. [optional]  # noqa: E501
            deaths (int): Number of deaths. [optional]  # noqa: E501
            denies (int): Number of denies. [optional]  # noqa: E501
            dn_t ([int]): Array containing number of denies at different times of the match. [optional]  # noqa: E501
            gold (int): Gold at the end of the game. [optional]  # noqa: E501
            gold_per_min (int): Gold Per Minute obtained by this player. [optional]  # noqa: E501
            gold_reasons (bool, date, datetime, dict, float, int, list, str, none_type): Object containing information on how the player gainined gold over the course of the match. [optional]  # noqa: E501
            gold_spent (int): How much gold the player spent. [optional]  # noqa: E501
            gold_t ([int]): Array containing total gold at different times of the match. [optional]  # noqa: E501
            hero_damage (int): Hero Damage Dealt. [optional]  # noqa: E501
            hero_healing (int): Hero Healing Done. [optional]  # noqa: E501
            hero_hits (bool, date, datetime, dict, float, int, list, str, none_type): Object containing information on how many ticks of damages the hero inflicted with different spells and damage inflictors. [optional]  # noqa: E501
            hero_id (int): The ID value of the hero played. [optional]  # noqa: E501
            item_0 (int): Item in the player's first slot. [optional]  # noqa: E501
            item_1 (int): Item in the player's second slot. [optional]  # noqa: E501
            item_2 (int): Item in the player's third slot. [optional]  # noqa: E501
            item_3 (int): Item in the player's fourth slot. [optional]  # noqa: E501
            item_4 (int): Item in the player's fifth slot. [optional]  # noqa: E501
            item_5 (int): Item in the player's sixth slot. [optional]  # noqa: E501
            item_uses (bool, date, datetime, dict, float, int, list, str, none_type): Object containing information about how many times a player used items. [optional]  # noqa: E501
            kill_streaks (bool, date, datetime, dict, float, int, list, str, none_type): Object containing information about the player's killstreaks. [optional]  # noqa: E501
            killed (bool, date, datetime, dict, float, int, list, str, none_type): Object containing information about what units the player killed. [optional]  # noqa: E501
            killed_by (bool, date, datetime, dict, float, int, list, str, none_type): Object containing information about who killed the player. [optional]  # noqa: E501
            kills (int): Number of kills. [optional]  # noqa: E501
            kills_log ([MatchResponseKillsLog]): Array containing information on which hero the player killed at what time. [optional]  # noqa: E501
            lane_pos (bool, date, datetime, dict, float, int, list, str, none_type): Object containing information on lane position. [optional]  # noqa: E501
            last_hits (int): Number of last hits. [optional]  # noqa: E501
            leaver_status (int): Integer describing whether or not the player left the game. 0: didn't leave. 1: left safely. 2+: Abandoned. [optional]  # noqa: E501
            level (int): Level at the end of the game. [optional]  # noqa: E501
            lh_t ([int]): Array describing last hits at each minute in the game. [optional]  # noqa: E501
            life_state (bool, date, datetime, dict, float, int, list, str, none_type): life_state. [optional]  # noqa: E501
            max_hero_hit (bool, date, datetime, dict, float, int, list, str, none_type): Object with information on the highest damage instance the player inflicted. [optional]  # noqa: E501
            multi_kills (bool, date, datetime, dict, float, int, list, str, none_type): Object with information on the number of the number of multikills the player had. [optional]  # noqa: E501
            obs (bool, date, datetime, dict, float, int, list, str, none_type): Object with information on where the player placed observer wards. The location takes the form (outer number, inner number) and are from ~64-192.. [optional]  # noqa: E501
            obs_left_log ([bool, date, datetime, dict, float, int, list, str, none_type]): obs_left_log. [optional]  # noqa: E501
            obs_log ([bool, date, datetime, dict, float, int, list, str, none_type]): Object containing information on when and where the player placed observer wards. [optional]  # noqa: E501
            obs_placed (int): Total number of observer wards placed. [optional]  # noqa: E501
            party_id (int): party_id. [optional]  # noqa: E501
            permanent_buffs ([bool, date, datetime, dict, float, int, list, str, none_type]): Array describing permanent buffs the player had at the end of the game. List of constants can be found here: https://github.com/odota/dotaconstants/blob/master/json/permanent_buffs.json. [optional]  # noqa: E501
            pings (int): Total number of pings. [optional]  # noqa: E501
            purchase (bool, date, datetime, dict, float, int, list, str, none_type): Object containing information on the items the player purchased. [optional]  # noqa: E501
            purchase_log ([MatchResponsePurchaseLog]): Object containing information on when items were purchased. [optional]  # noqa: E501
            rune_pickups (int): Number of runes picked up. [optional]  # noqa: E501
            runes ({str: (int,)}): Object with information about which runes the player picked up. [optional]  # noqa: E501
            runes_log ([MatchResponseRunesLog]): Array with information on when runes were picked up. [optional]  # noqa: E501
            sen (bool, date, datetime, dict, float, int, list, str, none_type): Object with information on where sentries were placed. The location takes the form (outer number, inner number) and are from ~64-192.. [optional]  # noqa: E501
            sen_left_log ([bool, date, datetime, dict, float, int, list, str, none_type]): Array containing information on when and where the player placed sentries. [optional]  # noqa: E501
            sen_log ([bool, date, datetime, dict, float, int, list, str, none_type]): Array with information on when and where sentries were placed by the player. [optional]  # noqa: E501
            sen_placed (int): How many sentries were placed by the player. [optional]  # noqa: E501
            stuns (float): Total stun duration of all stuns by the player. [optional]  # noqa: E501
            times ([int]): Time in seconds corresponding to the time of entries of other arrays in the match.. [optional]  # noqa: E501
            tower_damage (int): Total tower damage done by the player. [optional]  # noqa: E501
            xp_per_min (int): Experience Per Minute obtained by the player. [optional]  # noqa: E501
            xp_reasons (bool, date, datetime, dict, float, int, list, str, none_type): Object containing information on the sources of this player's experience. [optional]  # noqa: E501
            xp_t ([int]): Experience at each minute of the game. [optional]  # noqa: E501
            personaname (str): personaname. [optional]  # noqa: E501
            name (str): name. [optional]  # noqa: E501
            last_login (datetime): Time of player's last login. [optional]  # noqa: E501
            radiant_win (bool): Boolean indicating whether Radiant won the match. [optional]  # noqa: E501
            start_time (int): Start time of the match in seconds since 1970. [optional]  # noqa: E501
            duration (int): Duration of the game in seconds. [optional]  # noqa: E501
            cluster (int): cluster. [optional]  # noqa: E501
            lobby_type (int): Integer corresponding to lobby type of match. List of constants can be found here: https://github.com/odota/dotaconstants/blob/master/json/lobby_type.json. [optional]  # noqa: E501
            game_mode (int): Integer corresponding to game mode played. List of constants can be found here: https://github.com/odota/dotaconstants/blob/master/json/game_mode.json. [optional]  # noqa: E501
            patch (int): Integer representing the patch the game was played on. [optional]  # noqa: E501
            region (int): Integer corresponding to the region the game was played on. [optional]  # noqa: E501
            is_radiant (bool): Boolean for whether or not the player is on Radiant. [optional]  # noqa: E501
            win (int): Binary integer representing whether or not the player won. [optional]  # noqa: E501
            lose (int): Binary integer representing whether or not the player lost. [optional]  # noqa: E501
            total_gold (int): Total gold at the end of the game. [optional]  # noqa: E501
            total_xp (int): Total experience at the end of the game. [optional]  # noqa: E501
            kills_per_min (float): Number of kills per minute. [optional]  # noqa: E501
            kda (float): kda. [optional]  # noqa: E501
            abandons (int): abandons. [optional]  # noqa: E501
            neutral_kills (int): Total number of neutral creeps killed. [optional]  # noqa: E501
            tower_kills (int): Total number of tower kills the player had. [optional]  # noqa: E501
            courier_kills (int): Total number of courier kills the player had. [optional]  # noqa: E501
            lane_kills (int): Total number of lane creeps killed by the player. [optional]  # noqa: E501
            hero_kills (int): Total number of heroes killed by the player. [optional]  # noqa: E501
            observer_kills (int): Total number of observer wards killed by the player. [optional]  # noqa: E501
            sentry_kills (int): Total number of sentry wards killed by the player. [optional]  # noqa: E501
            roshan_kills (int): Total number of roshan kills (last hit on roshan) the player had. [optional]  # noqa: E501
            necronomicon_kills (int): Total number of Necronomicon creeps killed by the player. [optional]  # noqa: E501
            ancient_kills (int): Total number of Ancient creeps killed by the player. [optional]  # noqa: E501
            buyback_count (int): Total number of buyback the player used. [optional]  # noqa: E501
            observer_uses (int): Number of observer wards used. [optional]  # noqa: E501
            sentry_uses (int): Number of sentry wards used. [optional]  # noqa: E501
            lane_efficiency (float): lane_efficiency. [optional]  # noqa: E501
            lane_efficiency_pct (float): lane_efficiency_pct. [optional]  # noqa: E501
            lane (int): Integer referring to which lane the hero laned in. [optional]  # noqa: E501
            lane_role (int): lane_role. [optional]  # noqa: E501
            is_roaming (bool): Boolean referring to whether or not the player roamed. [optional]  # noqa: E501
            purchase_time (bool, date, datetime, dict, float, int, list, str, none_type): Object with information on when the player last purchased an item. [optional]  # noqa: E501
            first_purchase_time (bool, date, datetime, dict, float, int, list, str, none_type): Object with information on when the player first puchased an item. [optional]  # noqa: E501
            item_win (bool, date, datetime, dict, float, int, list, str, none_type): Object with information on whether or not the item won. [optional]  # noqa: E501
            item_usage (bool, date, datetime, dict, float, int, list, str, none_type): Object containing binary integers the tell whether the item was purchased by the player (note: this is always 1). [optional]  # noqa: E501
            purchase_tpscroll (bool, date, datetime, dict, float, int, list, str, none_type): Total number of TP scrolls purchased by the player. [optional]  # noqa: E501
            actions_per_min (int): Actions per minute. [optional]  # noqa: E501
            life_state_dead (int): life_state_dead. [optional]  # noqa: E501
            rank_tier (int): The rank tier of the player. Tens place indicates rank, ones place indicates stars.. [optional]  # noqa: E501
            cosmetics ([int]): cosmetics. [optional]  # noqa: E501
            benchmarks (bool, date, datetime, dict, float, int, list, str, none_type): Object containing information on certain benchmarks like GPM, XPM, KDA, tower damage, etc. [optional]  # noqa: E501
        """

        _check_type = kwargs.pop('_check_type', True)
        _spec_property_naming = kwargs.pop('_spec_property_naming', False)
        _path_to_item = kwargs.pop('_path_to_item', ())
        _configuration = kwargs.pop('_configuration', None)
        _visited_composed_classes = kwargs.pop('_visited_composed_classes', ())

        if args:
            for arg in args:
                if isinstance(arg, dict):
                    kwargs.update(arg)
                else:
                    raise ApiTypeError(
                        "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
                            args,
                            self.__class__.__name__,
                        ),
                        path_to_item=_path_to_item,
                        valid_classes=(self.__class__,),
                    )

        self._data_store = {}
        self._check_type = _check_type
        self._spec_property_naming = _spec_property_naming
        self._path_to_item = _path_to_item
        self._configuration = _configuration
        self._visited_composed_classes = _visited_composed_classes + (self.__class__,)

        for var_name, var_value in kwargs.items():
            if var_name not in self.attribute_map and \
                        self._configuration is not None and \
                        self._configuration.discard_unknown_keys and \
                        self.additional_properties_type is None:
                # discard variable.
                continue
            setattr(self, var_name, var_value)
            if var_name in self.read_only_vars:
                raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate "
                                     f"class with read only attributes.")
