code: def _init_attr(self, bitstring_map: Dict[str, str]):
          
          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()
docs: 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