Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在父类中设置覆盖默认KWARG?_Python - Fatal编程技术网

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

Python 如何在父类中设置覆盖默认KWARG?,python,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): su

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

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.。\uuuu init\uuuu中设置的实例变量所隐藏

例如,您可以使用:


@我刚刚添加了语义打印语句。如果你运行准确的代码,你会很快意识到这个问题不是打印错误。是的,我编辑了这个问题,希望能让它更清楚。您没有区分哪些输出是预期的,哪些不是。请参见为什么ab?这是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)