What's the approved programming pattern for distributing keyword arguments among called functions?
Consider this contrived (and buggy) example:
def create_box(**kwargs):
box = Box()
set_size(box, **kwargs)
set_appearance(box, **kwargs)
def set_size(box, width=1, height=1, length=1):
...
def set_appearance(box, material='cardboard', color='brown'):
...
Obviously the set_size() method will object to receiving material or color keyword arguments, just as set_appearance() will object to receiving width, height, or length arguments.
There's a valid argument that create_box() should make all of the keyword and defaults explicit, but the obvious implementation is rather unwieldy:
def create_box(width=1, height=1, length=1, material='cardboard', color='brown'):
box = Box()
set_size(box, width=width, height=height, length=length)
set_appearance(box, material=material, color=color)
Is there a more Pythonic way to approach this?