title: What does the Python naming convention with single/double underscore before a function mean?
body: <p>I am unsure how to phrase the question I am asking so feel free to change the title.</p>
  
  <p>Currently, I am working on an existing python codebase and came across this "style" and hope to understand the benefits for using it. </p>
  
  <p>for example,</p>
  
  <pre><code>Class Pokemon(object):
     def __init__(self, name):
          self.name = name
  
     def _catch(self, pokeball):
         ''' actual implementation here'''
  
     def catch(self, pokeball):
         _catch(pokeball)
  </code></pre>
  
  <p>You may notice that calls to the catch() function will be rerouted to the _catch() function. I understand that an underscore before a function could be meant to prevent accidental overriding of the function.</p>
  
  <p>EDIT: I think the title should be modified again, I understand what the underscores mean however I was unsure of why we use a catch() and _catch() as we obviously want to expose the function with catch() but decide to stick the implementation within _catch().</p>