Python: passando os valores padrão dos argumentos da função 'para * args ou ** kwargs

Considere um exemplo:

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)

Resultado:

(5, 5) {}

Por que não(5, 5) {'z': 0}? Como passar todos os valores padrão da funçãofoo para*args ou**kwargs usando apenas decorador (para funções) ou metaclasse (para métodos de classe, por exemplo__init__)?