code: def get_signature_params(self):
      obj = self._obj
      if py_version < 33:
          raise ValueError("inspect.signature was introduced in 3.3")
      if py_version == 34:
          # In 3.4 inspect.signature are wrong for str and int. This has
          # been fixed in 3.5. The signature of object is returned,
          # because no signature was found for str. Here we imitate 3.5
          # logic and just ignore the signature if the magic methods
          # don't match object.
          # 3.3 doesn't even have the logic and returns nothing for str
          # and classes that inherit from object.
          user_def = inspect._signature_get_user_defined_method
          if (
              inspect.isclass(obj)
              and not user_def(type(obj), "__init__")
              and not user_def(type(obj), "__new__")
              and (
                  obj.__init__ != object.__init__
                  or obj.__new__ != object.__new__
              )
          ):
              raise ValueError
  
      try:
          signature = inspect.signature(obj)
      except (RuntimeError, TypeError):
          # Reading the code of the function in Python 3.6 implies there are
          # at least these errors that might occur if something is wrong with
          # the signature. In that case we just want a simple escape for now.
          raise ValueError
      return [
          SignatureParam(
              name=p.name,
              has_default=p.default is not p.empty,
              default=self._create_access_path(p.default),
              has_annotation=p.annotation is not p.empty,
              annotation=self._create_access_path(p.annotation),
              kind_name=str(p.kind),
          )
          for p in signature.parameters.values()
      ]
  
imports: import inspect
  import types
  import sys
  from textwrap import dedent
  import operator
  from collections import namedtuple
  from jedi._compatibility import unicode, is_py3, builtins, py_version, force_unicode, print_to_stderr
  from jedi.evaluate.compiled.getattr_static import getattr_static
label_desc: Use image node_id 28 for calling the DirectObjectAccess obj's underlying member method code with example usage: obj.get_signature_params() and returns: unknown