如何在父类中设置覆盖默认kwargs?

时间:2016-06-23 08:04:03

标签: python

我们说我有以下父母和子课程:

class A(object):
    def __init__(self, *args, **kwargs):
        self.a = kwargs.get('a', 'default_A')
        self.b = kwargs.get('b', 'default_B')

class B(A):

    a = "override_A"

    def __init__(self, *args, **kwargs):
        super(B, self).__init__(**kwargs)

b = B()

print b.b  # this is "default_B", as expected
print b.a  # I expected this to be "override_A"

我在这里做错了什么?我试图通过像this one这样的答案来了解继承是如何运作的,但却没有找到描述这一特定要求的东西。

1 个答案:

答案 0 :(得分:7)

您正在混合类和实例变量。 B.a是一个类变量,它被A.__init__()中设置的实例变量遮蔽。

例如,您可以使用dict.setdefault()

class B(A):

    def __init__(self, *args, **kwargs):
        # If the key 'a' exists, this'll be effectively no-operation.
        # If not, then 'a' is set to 'override_A'.
        kwargs.setdefault('a', 'override_A')
        super(B, self).__init__(**kwargs)