def _init_attr(self, bitstring_map: Dict[str, str]):
        """
        Acts instead of __init__ method to instantiate the necessary Deutsch-Jozsa state.

        :param Dict[String, String] bitstring_map: truth-table of the input bitstring map in
        dictionary format, used to construct the oracle in the Deutsch-Jozsa algorithm.
        :return: None
        :rtype: NoneType
        """
        self.bit_map = bitstring_map
        self.n_qubits = len(list(bitstring_map.keys())[0])
        # We use one extra qubit for making the oracle,
        # and one for storing the answer of the oracle.
        self.n_ancillas = 2
        self._qubits = list(range(self.n_qubits + self.n_ancillas))
        self.computational_qubits = self._qubits[:self.n_qubits]
        self.ancillas = self._qubits[self.n_qubits:]
        self.unitary_matrix = self.unitary_function(bitstring_map)
        self.deutsch_jozsa_circuit = self._construct_deutsch_jozsa_circuit()
Acts instead of __init__ method to instantiate the necessary Deutsch-Jozsa state.

        :param Dict[String, String] bitstring_map: truth-table of the input bitstring map in
        dictionary format, used to construct the oracle in the Deutsch-Jozsa algorithm.
        :return: None
        :rtype: NoneType