关于python:如何在父类中设置覆盖默认kwargs?

How can I set override default kwargs in a parent class?

假设我有以下父类和子类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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"

我在这里做错什么了?我试图通过这样的答案理解继承是如何工作的,但没有找到描述这个特定需求的东西。


您混合了类和实例变量。B.a是一个类变量,它被A.__init__()中设置的实例变量所覆盖。

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

1
2
3
4
5
6
7
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)