<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 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