def autohash_decorate(cls,                          # type: Type[T]
                      include=None,                 # type: Union[str, Tuple[str]]
                      exclude=None,                 # type: Union[str, Tuple[str]]
                      only_constructor_args=False,  # type: bool
                      only_public_fields=False,     # type: bool
                      ):
    # type: (...) -> Type[T]
    """
    To automatically generate the appropriate methods so that objects of this class are hashable,
    manually, without using @autohash decorator.

    :param cls: the class on which to execute. Note that it won't be wrapped.
    :param include: a tuple of explicit attribute names to include (None means all)
    :param exclude: a tuple of explicit attribute names to exclude. In such case, include should be None.
    :param only_constructor_args: if False (default), all fields will be included in the hash, even if they are defined
    in the constructor or dynamically. If True, only constructor arguments will be included in the hash, not any other
    field that would be created in the constructor or dynamically. Please note that this behaviour is the opposite from
    @autodict.
    :param only_public_fields: this parameter is only used when only_constructor_args is set to False. If
    only_public_fields is set to False (default), all fields are used in the hash. Otherwise, class-private fields will
    not be taken into account in the hash. Please note that this behaviour is the opposite from @autodict.
    :return:
    """

    # first check that we do not conflict with other known decorators
    _check_known_decorators(cls, '@autohash')

    # perform the class mod
    _execute_autohash_on_class(cls, include=include, exclude=exclude, only_constructor_args=only_constructor_args,
                               only_public_fields=only_public_fields)

    return cls
To automatically generate the appropriate methods so that objects of this class are hashable,
    manually, without using @autohash decorator.

    :param cls: the class on which to execute. Note that it won't be wrapped.
    :param include: a tuple of explicit attribute names to include (None means all)
    :param exclude: a tuple of explicit attribute names to exclude. In such case, include should be None.
    :param only_constructor_args: if False (default), all fields will be included in the hash, even if they are defined
    in the constructor or dynamically. If True, only constructor arguments will be included in the hash, not any other
    field that would be created in the constructor or dynamically. Please note that this behaviour is the opposite from
    @autodict.
    :param only_public_fields: this parameter is only used when only_constructor_args is set to False. If
    only_public_fields is set to False (default), all fields are used in the hash. Otherwise, class-private fields will
    not be taken into account in the hash. Please note that this behaviour is the opposite from @autodict.
    :return: