def __init__(self, mac_address, manager, managed=True):
self.mac_address = mac_address<EOL>self.manager = manager<EOL>self.services = []<EOL>self._bus = manager._bus<EOL>self._object_manager = manager._object_manager<EOL>self._device_path = '<STR_LIT>' % (manager.adapter_name, mac_address.replace('<STR_LIT::>', '<STR_LIT:_>').upper())<EOL>device_object = self._bus.get_object('<STR_LIT>', self._device_path)<EOL>self._object = dbus.Interface(device_object, '<STR_LIT>')<EOL>self._properties = dbus.Interface(self._object, '<STR_LIT>')<EOL>self._properties_signal = None<EOL>self._connect_retry_attempt = None<EOL>if managed:<EOL><INDENT>manager._manage_device(self)<EOL><DEDENT>
Represents a BLE GATT device.

This class is intended to be sublcassed with a device-specific implementations
that reflect the device's GATT profile.

:param mac_address: MAC address of this device
:manager: `DeviceManager` that shall manage this device
:managed: If False, the created device will not be managed by the device manager
          Particularly of interest for sub classes of `DeviceManager` who want
          to decide on certain device properties if they then create a subclass
          instance of that `Device` or not.