<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def synthesizeProperty(propertyName, default = None, contract = None, readOnly = False, privateMemberName = None):
 """ When applied to a class, this decorator adds a property to it and overrides the constructor in order to set\ the default value of the property. :IMPORTANT: In order for this to work on python 2, you must use new objects that is to say that the class must inherit from object. By default, the private attribute containing the property's value will be named ``propertyName`` with '_' prepended to it. Naming convention can be overridden with a custom one using :meth:`namingConvention <namingConvention>` decorator. :param propertyName: Name of the property to synthesize. :type propertyName: str :param default: Property's default value. :type default: * :param contract: Type constraint. See `PyContracts <http://andreacensi.github.com/contracts/>`_ :type contract: * :param readOnly: If set to ``True``, the property will not a have a setter. :type readOnly: bool :param privateMemberName: Custom name for the private attribute that contains the property's value. :type privateMemberName: str|None :raises: :class:`DuplicateMemberNameError` when two synthetic members have the same name. :raises: :class:`InvalidPropertyOverrideError` when there's already a member with that name and which is not a property. """

    return SyntheticDecoratorFactory().syntheticMemberDecorator(memberName = propertyName,
                                                                defaultValue = default,
                                                                contract = contract,
                                                                readOnly = readOnly,
                                                                privateMemberName = privateMemberName,
                                                                memberDelegate = PropertyDelegate())