When applied to a class, this decorator adds getter/setter methods to it and overrides the constructor in order to set\
    the default value of the member.
    By default, the getter will be named ``memberName``. (Ex.: ``memberName = 'member' => instance.member()``)
    
    By default, the setter will be named ``memberName`` with the first letter capitalized and 'set' prepended it to it.
    (Ex.: ``memberName = "member" => instance.setMember(...)``)

    By default, the private attribute containing the member's value will be named ``memberName`` with '_' prepended to it.

    Naming convention can be overridden with a custom one using :meth:`namingConvention <namingConvention>` decorator.

    :param memberName: Name of the member to synthesize.
    :type memberName: str
    :param default: Member'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 setter will not be added to the class.
    :type readOnly: bool
    :param getterName: Custom getter name. This can be useful when the member is a boolean. (Ex.: ``isAlive``)
    :type getterName: str|None
    :param setterName: Custom setter name.
    :type setterName: str|None
    :param privateMemberName: Custom name for the private attribute that contains the member's value.
    :type privateMemberName: str|None
    
    :raises: :class:`DuplicateMemberNameError` when two synthetic members have the same name.

def synthesizeMember(memberName,
                     default = None,
                     contract = None,
                     readOnly = False,
                     getterName = None,
                     setterName = None,
                     privateMemberName = None):
    """
    When applied to a class, this decorator adds getter/setter methods to it and overrides the constructor in order to set\
    the default value of the member.
    By default, the getter will be named ``memberName``. (Ex.: ``memberName = 'member' => instance.member()``)
    
    By default, the setter will be named ``memberName`` with the first letter capitalized and 'set' prepended it to it.
    (Ex.: ``memberName = "member" => instance.setMember(...)``)

    By default, the private attribute containing the member's value will be named ``memberName`` with '_' prepended to it.

    Naming convention can be overridden with a custom one using :meth:`namingConvention <namingConvention>` decorator.

    :param memberName: Name of the member to synthesize.
    :type memberName: str
    :param default: Member'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 setter will not be added to the class.
    :type readOnly: bool
    :param getterName: Custom getter name. This can be useful when the member is a boolean. (Ex.: ``isAlive``)
    :type getterName: str|None
    :param setterName: Custom setter name.
    :type setterName: str|None
    :param privateMemberName: Custom name for the private attribute that contains the member's value.
    :type privateMemberName: str|None
    
    :raises: :class:`DuplicateMemberNameError` when two synthetic members have the same name.
"""
    accessorDelegate = AccessorDelegate(namingConvention = NamingConventionCamelCase(),
                                        getterName = getterName,
                                        setterName = setterName)
    return SyntheticDecoratorFactory().syntheticMemberDecorator(memberName = memberName,
                                                                defaultValue = default,
                                                                contract = contract,
                                                                readOnly = readOnly,
                                                                privateMemberName = privateMemberName,
                                                                memberDelegate = accessorDelegate)