code: def match(self, abstract_consonant: AbstractConsonant) -> bool:
          
          if isinstance(abstract_consonant, AbstractConsonant):
              res = True
              if abstract_consonant.place is not None:
                  res = res and abstract_consonant.place == self.place
              if abstract_consonant.manner is not None:
                  res = res and abstract_consonant.manner == self.manner
              if abstract_consonant.voiced is not None:
                  res = res and abstract_consonant.voiced == self.voiced
              if abstract_consonant.geminate is not None:
                  res = res and abstract_consonant.geminate == self.geminate
              return res
          elif abstract_consonant is None:
              return True
          else:
              return False
docs: A real consonant matches an abstract consonant if and only if the required features of the abstract consonant
          are also features of the real consonant.
          :param abstract_consonant: AbstractConsonant
          :return: bool