@havelock Да, это то, что он говорил. Используйте x.get вместо x ['a'].

равится, как красиво выглядит / чувствует питон, и я надеюсь, что это может быть чище (удобочитаемость потрясающая).

Как правильно принять необязательный аргумент ключевого слова при переопределении подклассав этом где опциональноkwarg должен быть использованпосле super() вызов?

У меня есть форма django, где я хотел бы принять необязательный пользовательский аргумент, но если я определю его как один из аргументовuser=Noneтогда обычная форма вызоваform({}) предполагает, что позиционный аргумент относится к ключевому аргументуuser.

Код говорит лучше, чем (мои) слова:

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)

Я могу сделать это самым чистым, глядя на фактическоеForm класс, чтобы увидеть, какие аргументы он ищет, но одна из величайших вещей о создании подклассов в Python - это собрать всеargs а такжеkwargs и передать его в то, что вы подклассом. Также это не распространяется на любые изменения в источнике.

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

Но, к сожалению, у меня есть:

 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)

Спасибо за любой вклад!

Ответы на вопрос(1)

Ваш ответ на вопрос