def METHOD_NAME(self):
    values = []
    args = signature(self.__class__).parameters.items()
    for name, arg in args:
        # assert that arg is attribute of primitive
        error = '"{}" must be attribute of {}'
        assert hasattr(self, name), error.format(name, self.__class__.__name__)
        value = getattr(self, name)
        # check if args are the same type
        if isinstance(value, type(arg.default)):
            # skip if default value
            if arg.default == value:
                continue
        values.append((name, value))
    return values