@decorators_mod.cachedproperty<EOL><INDENT>def extra_decorators(self):<DEDENT>
frame = self.parent.frame()<EOL>if not isinstance(frame, ClassDef):<EOL><INDENT>return []<EOL><DEDENT>decorators = []<EOL>for assign in frame._get_assign_nodes():<EOL><INDENT>if isinstance(assign.value, node_classes.Call) and isinstance(<EOL>assign.value.func, node_classes.Name<EOL>):<EOL><INDENT>for assign_node in assign.targets:<EOL><INDENT>if not isinstance(assign_node, node_classes.AssignName):<EOL><INDENT>continue<EOL><DEDENT>if assign_node.name != self.name:<EOL><INDENT>continue<EOL><DEDENT>try:<EOL><INDENT>meth = frame[self.name]<EOL><DEDENT>except KeyError:<EOL><INDENT>continue<EOL><DEDENT>else:<EOL><INDENT>if (<EOL>isinstance(meth, FunctionDef)<EOL>and assign_node.frame() == frame<EOL>):<EOL><INDENT>decorators.append(assign.value)<EOL><DEDENT><DEDENT><DEDENT><DEDENT><DEDENT>return decorators<EOL>
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)