Python: pasar los valores predeterminados de los argumentos de la función a * args o ** kwargs

Considere un ejemplo:

def decorator(func):
    def wrapper(*args, **kwargs):
        print(args, kwargs)
        func(*args, **kwargs)
    return wrapper

@decorator
def foo(x, y, z=0):
    pass

foo(5, 5)

Salida:

(5, 5) {}

Por qué no(5, 5) {'z': 0}? Cómo pasar todos los valores predeterminados de la funciónfoo a*args o**kwargs usando solo decorador (para funciones) o metaclase (para métodos de clase, p. ej.__init__)?