def __init__(
        self,
        shadow_model_template: "CLONABLE",
        num_shadow_models: int = 3,
        disjoint_datasets=False,
        random_state=None,
    ):
        """
        Initializes shadow models using the provided template.

        :param shadow_model_template: Untrained classifier model to be used as a template for shadow models. Should be
                                      as similar as possible to the target model. Must implement clone_for_refitting
                                      method.
        :param num_shadow_models: How many shadow models to train to generate the shadow dataset.
        :param disjoint_datasets: A boolean indicating whether the datasets used to train each shadow model should be
                                  disjoint. Default is False.
        :param random_state: Seed for the numpy default random number generator.
        """

        self._shadow_models = [shadow_model_template.clone_for_refitting() for _ in range(num_shadow_models)]
        self._shadow_models_train_sets: list[tuple[np.ndarray, np.ndarray] | None] = [None] * num_shadow_models
        self._input_shape = shadow_model_template.input_shape
        self._rng = np.random.default_rng(seed=random_state)
        self._disjoint_datasets = disjoint_datasets

        Initializes shadow models using the provided template.

        :param shadow_model_template: Untrained classifier model to be used as a template for shadow models. Should be
                                      as similar as possible to the target model. Must implement clone_for_refitting
                                      method.
        :param num_shadow_models: How many shadow models to train to generate the shadow dataset.
        :param disjoint_datasets: A boolean indicating whether the datasets used to train each shadow model should be
                                  disjoint. Default is False.
        :param random_state: Seed for the numpy default random number generator.
        
art/attacks/inference/membership_inference/shadow_models.py