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))