继承时使用类属性的类属性



我有一块python代码:

class A(object):
    args = [1,2]
    def __init__(self):
        print self.args
class B(A):
    args = [3,4]
    def __init__(self):
        super(B, self).__init__()
        print self.args
B()

输出为:

[3,4]

[3,4]

而不是

[1,2]

[3,4]

从派生类调用基类的构造函数时,所使用的类属性来自派生类的名称空间?我有没有办法使用该函数属于的类的类属性?

有没有办法使用该函数属于的类的类属性?

是。通过其类属性名称,而不是其实例属性名称,请参考它们。也就是说,A.args,而不是self.args

class A(object):
    args = [1,2]
    def __init__(self):
        print A.args

这里发生的事情是,您已经用B的成员覆盖了args变量。Python首先查看子级B,以查看是否可以使用A构造函数使用自己的版本打印args。它找到B的args并打印该成员。

让我们看看当您将A的args重命名为arg之类的东西时会发生什么。我们现在看到了预期的行为。

class A(object):
    arg = [1,2]
    def __init__(self):
        print self.arg
class B(A):
    args = [3,4]
    def __init__(self):
        super(B, self).__init__()
        print self.args
B()

输出:

[1, 2]
[3, 4]

相关内容

  • 没有找到相关文章

最新更新