重载的父类字段Python

时间:2015-02-06 09:53:24

标签: python

有一些代码,但我不明白为什么它以这种方式工作:

class A(object):
    first = 20
    second = 30


class B(A):
    first = 21
    second = 31

    def mix(A):
        print(A.second)

var = B()

var.mix()

,输出为31,但我预计30

1 个答案:

答案 0 :(得分:3)

firstsecondA类属性,并且继承自A,然后在B中重写。我认为,这就是你所期待的。

>>> class A(object):
    first = 20
    second = 30


>>> class B(A):
    first = 21
    second = 31

    def mix(A):
        print(A.second)


>>> A.first
20
>>> A.second
30
>>> B.first
21
>>> B.second
31

您感到惊讶的原因是您已将第一个参数命名为B.mix始终是实例本身,并且通常命名为selfA 。因此,在mix方法内,该参数(B的实例)是"阴影" A。如果我们将两者都更改为self,您将看到相同的行为(并且它可能会更清楚为什么正在发生):

>>> class B(A):
    first = 21
    second = 31

    def mix(self):
        print(self.second)


>>> b = B()
>>> b.mix()
31

现在,如果我们保留传统的self参数名称,但将内部名称更改为A ,您将不再隐藏该类,并查看原始值class属性:

>>> class B(A):
    first = 21
    second = 31

    def mix(self):
        print(A.second)


>>> b = B()
>>> b.mix()
30