docs: def _bind_device(self):
          """
          This method transforms the ``self.pvs`` dict of :class:`PV` objects ``self.bound_pvs``,
          a dict of :class:`BoundPV` objects, the keys are always the PV-names that are exposed
          via ChannelAccess.
  
          In the transformation process, the method tries to find whether the attribute specified by
          PV's ``property`` (and ``meta_data_property``) is part of the internally stored device
          or the interface and constructs a BoundPV, which acts as a forwarder to the appropriate
          objects.
          """
          self.bound_pvs = {}
  
          for pv_name, pv in self.pvs.items():
              try:
                  self.bound_pvs[pv_name] = pv.bind(self, self.device)
              except (AttributeError, RuntimeError) as e:
                  self.log.debug('An exception was caught during the binding step of PV \'%s\'.',
                                 pv_name, exc_info=e)
                  raise LewisException(
                      'The binding step for PV \'{}\' failed, please check the interface-'
                      'definition or contact the device author. More information is '
                      'available with debug-level logging (-o debug).'.format(pv_name))