docstr: Returns the line of code where this object was defined.
  
  :param before: Add n lines before the current line to the output.
  :param after: Add n lines after the current line to the output.
  
  :return str: Returns the line(s) of code or an empty string if it's a
               builtin.
docstr_tok: ["Returns","the","line","of","code","where","this","object","was","defined",".",":","param","before",":","Add","n","lines","before","the","current","line","to","the","output",".",":","param","after",":","Add","n","lines","after","the","current","line","to","the","output",".",":","return","str",":","Returns","the","line","(","s",")","of","code","or","an","empty","string","if","it","'s","a","builtin","."]
code: def get_line_code(self, before=0, after=0):
      """
      Returns the line of code where this object was defined.
  
      :param before: Add n lines before the current line to the output.
      :param after: Add n lines after the current line to the output.
  
      :return str: Returns the line(s) of code or an empty string if it's a
                   builtin.
      """
      if self.in_builtin_module():
          return ""
  
      lines = self._name.get_root_context().code_lines
  
      index = self._name.start_pos[0] - 1
      start_index = max(index - before, 0)
      return "".join(lines[start_index : index + after + 1])
  
imports: import re
  from parso.python.tree import search_ancestor
  from jedi import settings
  from jedi.evaluate.utils import ignored, unite
  from jedi.cache import memoize_method
  from jedi.evaluate import imports
  from jedi.evaluate import compiled
  from jedi.evaluate.imports import ImportName
  from jedi.evaluate.context import instance
  from jedi.evaluate.context import ClassContext, FunctionExecutionContext
  from jedi.api.keywords import KeywordName
label_desc: Use image node_id 17 for calling the BaseDefinition obj's underlying member method code with example usage: obj.get_line_code(before, after) and returns: str, str