Python: ¿la forma más limpia de anular __init__ donde se debe usar un kwarg opcional después de la llamada super ()?

Me encanta lo hermosa que se ve / siente Python y espero que esto pueda ser más limpio (la legibilidad es increíble).

¿Cuál es una forma limpia de aceptar un argumento de palabra clave opcional al anular una subclaseen es donde el opcionalkwarg tiene que ser usadodespué elsuper() ¿llamada

Tengo un formulario django donde me gustaría aceptar un argumento de usuario opcional, pero si lo defino como uno de los argumentosuser=None, entonces la forma habitual llama aform({}) asume que el argumento posicional se refiere al argumento de la palabra claveuser.

Code habla mejor que (mis) palabras:

def __init__(self, *args, **kwargs):
    user = None
    if 'user' in kwargs:
        user = kwargs.pop('user')
    super(BaseCheckoutForm, self).__init__(*args, **kwargs)
    if user:
        self.prefill_from_user(user)

Puedo hacer que este sea el más limpio buscando en el @ reForm class para ver qué argumentos está buscando, pero una de las mejores cosas de subclasificar cualquier cosa en python es recopilar todosargs ykwargs y pasarlo a lo que hayas subclasificado. Además, esto no soporta ningún cambio en la fuente.

def __init__(self, querydict=None, user=None):
    super(BaseCheckoutForm, self).__init__(querydict)
    if user:
        self.prefill_from_user(user)

Pero desafortunadamente tengo:

 def __init__(self, *args, **kwargs):
    # cannot define user=None as an argument because normal usage
    # of class expects a certain order of positional args
    user = None
    if 'user' in kwargs:
        # must pop now since super()__init__ isn't expecting a user kwarg
        user = kwargs.pop('user') 
    super(BaseCheckoutForm, self).__init__(*args, **kwargs)
    if user:
        self.prefill_from_user(user)

¡Gracias por cualquier entrada!

Respuestas a la pregunta(1)

Su respuesta a la pregunta