【发布时间】:2017-05-28 04:01:14
【问题描述】:
我有一个Parent 类,其属性arg2 的默认值。我想创建一个子类Child,它对同一属性具有不同的默认值。
我需要在Child 中使用*args 和**kwargs。
我尝试了以下方法,但它不起作用:
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 是的,我似乎找不到修复它的好方法
标签: python constructor arguments subclass