
class Device:

    __slots__ = '_name', '_location', '_status'

    def __init__(self, name, location, status='ON'):
        self._name = name
        self.location = location
        self.status = status
    
    @property
    def name(self):
        return self._name

    @property
    def location(self):
        return self._location
    
    @location.setter
    def location(self, value):
        self._location = value
    
    @property
    def status(self):
        return self._status
    
    @status.setter
    def status(self, value):
        self._status = value

    def turn_on(self):
        self.status = 'ON'

    def turn_off(self):
        self.status = 'OFF'

class Light(Device):

    __slots__ = '_brightness', '_color'

    def __init__(self, name, location, brightness, color):
        super().__init__(name, location)
        self.brightness = brightness
        self._color = color
        
    @property
    def brightness(self):
        return self._brightness
    
    @brightness.setter
    def brightness(self, value):
        self._brightness = value
    
    @property
    def color(self):
        return self._color


class Thermostat(Device):

    __slots__ = '_current_temperature', '_target_temperature'

    def __init__(self, name, location, current_temperature, target_temperature):
        super().__init__(name, location)
        self.current_temperature = current_temperature
        self.target_temperature = target_temperature

    @property
    def current_temperature(self):
        return self._current_temperature
    
    @current_temperature.setter
    def current_temperature(self, value):
        self._current_temperature = value

    @property
    def target_temperature(self):
        return self._target_temperature
    
    @target_temperature.setter
    def target_temperature(self, value):
        self._target_temperature = value


class SmartTV(Device):

    __slots__ = '_channel'

    def __init__(self, name, location, channel):
        super().__init__(name, location)
        self.channel = channel

    @property
    def channel(self):
        return self._channel
    
    @channel.setter
    def channel(self, value):
        self._channel = value

def main():

    '''
    dev = Device('robot-bobot', 'Moscow', 'on')
    print(dev.name)

    light = Light('light-bobot', 'Moscow', 'on', 70, 'red')
    print(light.name)
    print(light.brightness)
    print(light.color)
    '''

    device1 = Device('Устройство 1', 'Гостиная')
    assert device1.name == 'Устройство 1'
    assert device1._name == 'Устройство 1'
    assert device1.location == 'Гостиная'
    assert device1._location == 'Гостиная'
    assert device1.status == 'ON'
    assert device1._status == 'ON'

    device1.turn_off()
    assert device1.status == 'OFF'
    device1.location = 'Кухня'
    assert device1.location == 'Кухня'
    assert device1._location == 'Кухня'
    device1.turn_on()
    assert device1.status == 'ON'

    light1 = Light('Лампа', 'Гостиная', 50, 'белый')
    light1.name == 'Лампа'
    light1.location == 'Гостиная'
    light1.status == 'ON'
    light1.brightness == '50'
    light1.color == 'белый'

    light1.turn_off()
    light1.status == 'OFF'

    thermostat_1 = Thermostat('Термометр', 'Балкон', 10, 15)
    thermostat_1.name == 'Термометр'
    thermostat_1.location == 'Балкон'
    thermostat_1.status == 'ON'
    thermostat_1.current_temperature == 10
    thermostat_1.target_temperature == 15

    tv = SmartTV('Samsung', 'Спальня', 20)
    tv.name == 'Термометр'
    tv.location == 'Балкон'
    tv.status == 'ON'
    tv.channel == 20

    print('GOOD')

if __name__ == '__main__':
    main()