我是一個對象的子類,以覆蓋我想要添加某些功能的方法。我不想完全替換它,或者添加一個不同名稱的方法,但只需向該方法添加可選參數即可與超類方法兼容。 是否可以使用*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