human
I wrote the below code

    class _DeprecatedProperty(property, ):
        '\n                                Extension    of    the    build-in    property    to    allow    deprecated    setters.\n                                '
        def _deprecatedWrapper(self, function):
            @wraps(function)
            def deprecatedFunction(*args, **kwargs):
                warn(self.warningString, DeprecationWarning, stacklevel=2)
                return function(*args, **kwargs)
            return deprecatedFunction
        def setter(self, function):
            return property.setter(self, self._deprecatedWrapper(function))
    def deprecationDecorator(function):
        if _PY3:
            warningString = getDeprecationWarningString(function, version, None, replacement)
        else:
            functionName = function.__name__
            className = inspect.stack()[1][3]
            moduleName = function.__module__
            fqdn = ('%s.%s.%s' % (moduleName, className, functionName))
            warningString = _getDeprecationWarningString(fqdn, version, None, replacement)
        @wraps(function)
        def deprecatedFunction(*args, **kwargs):
            warn(warningString, DeprecationWarning, stacklevel=2)
            return function(*args, **kwargs)
        _appendToDocstring(deprecatedFunction, _getDeprecationDocstring(version, replacement))
        deprecatedFunction.deprecatedVersion = version
        result = _DeprecatedProperty(deprecatedFunction)
        result.warningString = warningString
        return result
    return deprecationDecorator

What's a good function header?
assistant
#Here's a good function header.

def deprecatedProperty(version, replacement=None):