У меня есть класс Parent
со значением по умолчанию для атрибута arg2
. Я хочу создать подкласс Child
, который имеет другое значение по умолчанию для того же атрибута. Мне нужно использовать *args
и **kwargs
в Child
.Изменить значение аргумента конструктора по умолчанию (унаследовано от родительского класса) в подклассе
Я попытался следующие, но это не работает:
class Parent(object):
def __init__(self, arg1='something', arg2='old default value'):
self.arg1 = arg1
self.arg2 = arg2
print('arg1:', self.arg1)
print('arg2:', self.arg2)
class Child(Parent):
def __init__(self, *args, **kwargs):
super(Child, self).__init__(*args, **kwargs)
self.arg2 = kwargs.pop('arg2', 'new value')
Это не работает. На самом деле, я получаю:
>>> c = Child()
arg1: something
arg2: default value # This is still the old value
>>> c.arg2
'new value' # Seems more or less ok
>>> c = Child('one', 'two')
arg1: one
arg2: two
>>> c.arg2
'new value' # This is wrong, it has overridden the specified argument 'two'
Это обязательно произойдет; во втором примере 'arg2' -' args [1] ', а не' kwargs ['arg2'] '. – jonrsharpe
@jonrsharpe Да, и я не могу найти хороший способ исправить его. –