code: def extra_decorators(self):
          
          frame = self.parent.frame()
          if not isinstance(frame, ClassDef):
              return []
  
          decorators = []
          for assign in frame._get_assign_nodes():
              if isinstance(assign.value, node_classes.Call) and isinstance(
                  assign.value.func, node_classes.Name
              ):
                  for assign_node in assign.targets:
                      if not isinstance(assign_node, node_classes.AssignName):
                          # Support only `name = callable(name)`
                          continue
  
                      if assign_node.name != self.name:
                          # Interested only in the assignment nodes that
                          # decorates the current method.
                          continue
                      try:
                          meth = frame[self.name]
                      except KeyError:
                          continue
                      else:
                          # Must be a function and in the same frame as the
                          # original method.
                          if (
                              isinstance(meth, FunctionDef)
                              and assign_node.frame() == frame
                          ):
                              decorators.append(assign.value)
          return decorators
docs: The extra decorators that this function can have.
  
          Additional decorators are considered when they are used as
          assignments, as in ``method = staticmethod(method)``.
          The property will return all the callables that are used for
          decoration.
  
          :type: list(NodeNG)