Change if this descriptor's can be invalidated through `del obj.attr`.

        `cached_prop.deleter(True)` and::

            @cached_prop.deleter
            def cached_prop(self):
                pass

        are equivalent to `cached_prop.can_delete = True`.

        :param can_delete: boolean to change to it, and None to toggle
        :type can_delete: Optional[bool]
        :return: self, so this can be used as a decorator like a `property`
        :rtype: CachedProperty

def deleter(self, can_delete=None):
        """
        Change if this descriptor's can be invalidated through `del obj.attr`.

        `cached_prop.deleter(True)` and::

            @cached_prop.deleter
            def cached_prop(self):
                pass

        are equivalent to `cached_prop.can_delete = True`.

        :param can_delete: boolean to change to it, and None to toggle
        :type can_delete: Optional[bool]
        :return: self, so this can be used as a decorator like a `property`
        :rtype: CachedProperty
        """
        if can_delete is None:
            self._deleter = not self._deleter
        else:
            self._deleter = bool(can_delete)
        # For use as decorator
        return self