<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def set_zap_authenticator(self, zap_authenticator):
 """ Setup a ZAP authenticator. :param zap_authenticator: A ZAP authenticator instance to use. The context takes ownership of the specified instance. It will close it automatically when it stops. If `None` is specified, any previously owner instance is disowned and returned. It becomes the caller's responsibility to close it. :returns: The previous ZAP authenticator instance. """

        result = self._zap_authenticator

        if result:
            self.unregister_child(result)

        self._zap_authenticator = zap_authenticator

        if self.zap_client:
            self.zap_client.close()

        if self._zap_authenticator:
            self.register_child(zap_authenticator)
            self.zap_client = ZAPClient(context=self)
            self.register_child(self.zap_client)
        else:
            self.zap_client = None

        return result