code: def delayed_assattr(self, node):
          
          try:
              frame = node.frame()
              for inferred in node.expr.infer():
                  if inferred is util.Uninferable:
                      continue
                  try:
                      if inferred.__class__ is bases.Instance:
                          inferred = inferred._proxied
                          iattrs = inferred.instance_attrs
                          if not _can_assign_attr(inferred, node.attrname):
                              continue
                      elif isinstance(inferred, bases.Instance):
                          # Const, Tuple, ... we may be wrong, may be not, but
                          # anyway we don't want to pollute builtin's namespace
                          continue
                      elif inferred.is_function:
                          iattrs = inferred.instance_attrs
                      else:
                          iattrs = inferred.locals
                  except AttributeError:
                      # XXX log error
                      continue
                  values = iattrs.setdefault(node.attrname, [])
                  if node in values:
                      continue
                  # get assign in __init__ first XXX useful ?
                  if (
                      frame.name == "__init__"
                      and values
                      and values[0].frame().name != "__init__"
                  ):
                      values.insert(0, node)
                  else:
                      values.append(node)
          except exceptions.InferenceError:
              pass
docs: Visit a AssAttr node
  
          This adds name to locals and handle members definition.