Python:用一个或多个关键字参数扩展方法的优雅习惯用法是什么?

Python:用一个或多个关键字参数扩展方法的优雅习惯用法是什么?,python,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(SomeCla

我试图用一个关键字参数扩展一个方法,同时对该方法的其余签名保持公正;我只是想把它传下去。尝试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'
这是每夸克3行原油…

我会使用,就像这样:

class SomeSuperclass(object):
  def some_method(self, *args, **kwargs):
    print 'SomeSuperclass: args=%s kwargs=%s' % (args, kwargs)

class SomeClass(SomeSuperclass):
  def some_method(self, *args, **kwargs):
    my_kwarg = kwargs.pop('my_kwarg', 42) # 42 is the default
    print 'SomeClass: my_kwarg=%s' % my_kwarg
    super(SomeClass, self).some_method(*args, **kwargs)

SomeClass().some_method('arg 0', 'arg 1', some_kwargs=5, my_kwarg=8)
SomeClass().some_method('arg 0', 'arg 1', some_kwargs=5)
运行时,将打印出:

SomeClass: my_kwarg=8
SomeSuperclass: args=('arg 0', 'arg 1') kwargs={'some_kwargs': 5}
SomeClass: my_kwarg=42
SomeSuperclass: args=('arg 0', 'arg 1') kwargs={'some_kwargs': 5}
您可以使用
{}.pop()
将您的3行积垢变为1行:

my_kwarg = kwargs.pop('my_kwarg', 42)

我认为这也行得通:my_-kwarg=kwargs.pop('my_-kwarg',42)
my_kwarg = kwargs.pop('my_kwarg', 42)