Я подклассифицирую объект, чтобы переопределить метод, к которому я хочу добавить некоторые функции. Я не хочу полностью его заменять или добавлять другой метод, но оставаться совместимым с методом суперклассов, просто добавив необязательный аргумент в метод.
Возможно ли работать с *args
и **kwargs
, чтобы передать все аргументы суперклассу и добавить дополнительный аргумент со значением по умолчанию?
Я интуитивно придумал следующее, но это не работает:
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)
Какой правильный способ сделать это, должен ли я знать и явно указывать все аргументы переопределенных методов?