Decorator to validate the <type> of arguments in
    the calling function are of the `param_type` class.

    if `param_type` is None, uses `param_type` as the class where it is used.

    Note: Use this decorator on the functions of the class.

def validate_arguments_type_of_function(param_type=None):
    """
    Decorator to validate the <type> of arguments in
    the calling function are of the `param_type` class.

    if `param_type` is None, uses `param_type` as the class where it is used.

    Note: Use this decorator on the functions of the class.
    """

    def inner(function):

        def wrapper(self, *args, **kwargs):
            type_ = param_type or type(self)
            for arg in args + tuple(kwargs.values()):
                if not isinstance(arg, type_):
                    raise TypeError(
                        (
                            'Invalid Type: {}.{}() accepts only the '
                            'arguments of type "<{}>"'
                        ).format(
                            type(self).__name__,
                            function.__name__,
                            type_.__name__,
                        )
                    )

            return function(self, *args, **kwargs)

        return wrapper

    return inner