Python: Что такое элегантная идиома для расширения метода с помощью одного или нескольких аргументов ключевого слова?

Я пытаюсь расширить метод с одним аргументом ключевого слова, оставаясь при этом беспристрастным по отношению к остальной части сигнатуры метода; Я просто хочу передать это. Попытка 0:

class SomeSuperclass(object):
    pass # in reality: some implementation for some_method

class SomeClass(SomeSuperclass):
    def some_method(self, my_kwarg=42, *args, **kwargs):
        super(SomeClass, self).some_method(*args, **kwargs)
        do_something_interesting_with(my_kwarg)

SomeClass().some_method('arg 0', 'arg 1', some_kwargs=5, my_kwarg=8)

Это не работает:

Traceback (most recent call last):
  File "test.py", line 9, in <module>
    SomeClass().some_method('arg 0', 'arg 1', some_kwargs=5, my_kwarg=8)
TypeError: some_method() got multiple values for keyword argument 'my_kwarg'

Я полностью понимаю, почему вышеперечисленное не работает, но я ищу хороший способ заставить его работать. Это мой текущий (уродливый) обходной путь:

class SomeClass(SomeSuperclass):
    def some_method(self, *args, **kwargs):
        my_kwarg = kwargs.get('my_kwarg', 42) 
        if 'my_kwarg' in kwargs:
            del kwargs['my_kwarg']
        super(SomeClass, self).some_method(*args, **kwargs)
        do_something_interesting_with(my_kwarg)

Это 3 строки хлама на кварг ...

7
задан Klaas van Schelven 28 July 2011 в 12:52
поделиться