title: Protected method in python
body: <blockquote>
    <p><strong>Possible Duplicate:</strong><br>
    <a href="https://stackoverflow.com/questions/451963/making-a-method-private-in-a-python-subclass">Making a method private in a python subclass</a><br>
    <a href="https://stackoverflow.com/questions/3385317/private-variables-and-methods-in-python">Private Variables and Methods in Python</a>  </p>
  </blockquote>
  
  
  
  <p>How can I define a method in a python class that is protected and only subclasses can see it?</p>
  
  <p>This is my code:</p>
  
  <pre><code>class BaseType(Model):
      def __init__(self):
          Model.__init__(self, self.__defaults())
  
  
      def __defaults(self):
          return {'name': {},
                  'readonly': {},
                  'constraints': {'value': UniqueMap()},
                  'cType': {}
          }
  
  
      cType = property(lambda self: self.getAttribute("cType"), lambda self, data:              self.setAttribute('cType', data))
      name = property(lambda self: self.getAttribute("name"), lambda self, data: self.setAttribute('name', data))
      readonly = property(lambda self: self.getAttribute("readonly"),
                          lambda self, data: self.setAttribute('readonly', data))
  
      constraints = property(lambda self: self.getAttribute("constraints"))
  
      def getJsCode(self):
          pass
  
      def getCsCode(self):
          pass
  
  
      def generateCsCode(self, template=None, constraintMap=None, **kwargs):
          if not template:
              template = self.csTemplate
  
          if not constraintMap: constraintMap = {}
          atts = ""
  
          constraintMap.update(constraintMap)
  
          for element in self.getNoneEmptyAttributes():
              if not AbstractType.constraintMap.has_key(element[0].lower()):
                  continue
              attTemplate = Template(AbstractType.constraintMap[element[0].lower()]['cs'])
              attValue = str(element[1]['value'])
              atts += "%s  " % attTemplate.substitute({'value': attValue})
  
          kwargs.update(dict(attributes=atts))
  
          return template.substitute(kwargs)
  
  
  
  class  MainClass(BaseType, Model):
      def __init__(self):
          #Only Model will initialize
          Model.__init__(self, self.__defaults())
          BaseType.__init__(self)
  
      def __defaults(self):
          return {'name': {},
                  'fields': {'value': UniqueMap()},
                  'innerClass': {'value': UniqueMap()},
                  'types': {}
          }
  
      fields = property(lambda self: self.getAttribute("fields"))
      innerClass = property(lambda self: self.getAttribute("innerClass"))
      types = property(lambda self: self.getAttribute("types"))
  
  
      @staticmethod
      def isType(iType):
      #        return type(widget) in WidgetSelector.widgets.itervalues()
          return isinstance(iType, AbstractType)
  
      def addType(self, type):
          if not MainClass.isType(type):
              raise Exception, "Unknown widget type %s" % type
          self.types[type.name] = type
  </code></pre>
  
  <p>I want that just subclasses of <code>BaseType</code> see the <code>generateCsCode</code> method of <code>BaseType</code>.</p>