def __init__(
        self,
        estimator,
        iterations: int,
        laser_generator: AdvObjectGenerator,
        image_generator: ImageGenerator = ImageGenerator(),
        random_initializations: int = 1,
        optimisation_algorithm: Callable = greedy_search,
        debug: DebugInfo | None = None,
    ) -> None:
        """
        :param estimator: Predictor of the image class.
        :param iterations: Maximum number of iterations of the algorithm.
        :param laser_generator: Object responsible for generation laser beams images and their update.
        :param image_generator: Object responsible for image generation.
        :param random_initializations: How many times repeat the attack.
        :param optimisation_algorithm: Algorithm used to generate adversarial example. May be replaced.
        :param debug: Optional debug handler.
        """

        super().__init__(estimator=estimator)
        self.iterations = iterations
        self.random_initializations = random_initializations
        self.optimisation_algorithm = optimisation_algorithm
        self._laser_generator = laser_generator
        self._image_generator = image_generator
        self._debug = debug

        self._check_params()

        :param estimator: Predictor of the image class.
        :param iterations: Maximum number of iterations of the algorithm.
        :param laser_generator: Object responsible for generation laser beams images and their update.
        :param image_generator: Object responsible for image generation.
        :param random_initializations: How many times repeat the attack.
        :param optimisation_algorithm: Algorithm used to generate adversarial example. May be replaced.
        :param debug: Optional debug handler.
        
art/attacks/evasion/laser_attack/laser_attack.py