class_docstr: Implementation of a an attribute inference attack that utilizes a membership inference attack.
  
  The idea is to find the target feature value that causes the membership inference attack to classify the sample
  as a member with the highest confidence.
code: def _check_params(self) -> None:
      super()._check_params()
  
      if not isinstance(
          self.membership_attack, MembershipInferenceAttack
      ):
          raise ValueError(
              "membership_attack should be a sub-class of MembershipInferenceAttack"
          )
  
file_path: adversarial-robustness-toolbox/art/attacks/inference/attribute_inference/meminf_based.py
imports: from __future__ import absolute_import, division, print_function, unicode_literals
  import logging
  from typing import Optional, Union, List, TYPE_CHECKING
  import numpy
  from art.estimators.estimator import BaseEstimator
  from art.estimators.classification.classifier import ClassifierMixin
  from art.attacks.attack import AttributeInferenceAttack, MembershipInferenceAttack
  from art.estimators.regression import RegressorMixin
  from art.exceptions import EstimatorError
label_desc: Use image node_id 3 for calling the AttributeInferenceMembership obj's underlying member method code with example usage: obj._check_params() without return types