code: def get_getter(cls, prop_name,  # @NoSelf
                     user_getter=None, getter_takes_name=False):
          
          if user_getter:
              if getter_takes_name:  # wraps the property name
                  _deps = type(cls)._get_old_style_getter_deps(cls, prop_name,
                                                               user_getter)
  
                  def _getter(self, deps=_deps):
                      return user_getter(self, prop_name)
              else:
                  _getter = user_getter
              return _getter
  
          def _getter(self):  # @DuplicatedSignature
              return getattr(self, PROP_NAME % {'prop_name' : prop_name})
          return _getter
docs: Returns a function wich is a getter for a property.
          prop_name is the name off the property.
  
          user_getter is an optional function doing the work. If
          specified, that function will be called instead of getting
          the attribute whose name is in 'prop_name'.
  
          If user_getter is specified with a False value for
          getter_takes_name (default), than the method is used to get
          the value of the property. If True is specified for
          getter_takes_name, then the user_getter is called by
          passing the property name (i.e. it is considered a general
          method which receive the property name whose value has to
          be returned.)