<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_getter(cls, prop_name, # @NoSelf user_getter=None, getter_takes_name=False):
 """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.) """

        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