我是一个对象的子类,以覆盖我想要添加某些功能的方法。我不想完全替换它,或者添加一个不同名称的方法,但只需向该方法添加可选参数即可与超类方法兼容。 是否可以使用*args
和**kwargs
来传递超类的所有参数,并仍然使用默认值添加可选参数? 我直觉想出了下面的,但它不工作:将一个关键字参数添加到重写的方法并使用** kwarg
class A(object):
def foo(self, arg1, arg2, argopt1="bar"):
print arg1, arg2, argopt1
class B(A):
def foo(self, *args, argopt2="foo", **kwargs):
print argopt2
A.foo(self, *args, **kwargs)
b = B()
b.foo("a", "b", argopt2="foo")
当然,我可以得到它的工作时,我明确添加父类的方法的所有参数:
class B(A):
def foo(self, arg1, arg2, argopt1="foo", argopt2="bar"):
print argopt2
A.foo(self, arg1, arg2, argopt1=argopt1)
这样做的正确方法是什么?我必须知道并明确声明所有重写的方法参数吗?
您可以使用弹出而不是GET + DEL。 – iny 2009-11-11 15:27:05
我总是忘记dict.pop! – 2009-11-11 15:37:31
当'argopt2'未传递时,您的示例失败并出现'KeyError'。使用'kwargs.pop('argopt2',default_for_argopt2)'是修复它的最简单方法。 – 2009-11-11 17:26:10