更改类变量,继承后,在python中使用子类

问题描述 投票:0回答:1

为什么第二个输出不是 2 2 2,第三个输出不是 3 3 3? 这样的输出背后的原因是什么?

class A(object): 
    val = 1

class B(A): 
    pass

class C(A): 
    pass

print (A.val, B.val, C.val) 
B.val = 2
print (A.val, B.val, C.val) 
A.val = 3
print (A.val, B.val, C.val)
python oop inheritance
1个回答
0
投票

您使用 A() 初始化所有类,因此 A.val、B.val、C.val 都引用相同的值 1 (1 1 1)

当您修改 B.val = 2 时,B.val 的值会发生变化,但 A.val 和 C.val 的值保持不变 (1 2 1)

接下来修改 A.val = 3 soo A.val = 3 并且由于 C.val 继承自 A,因此它也变为 3。但是 B.val 仍然为 2,因为它有自己的 val 属性,该属性与 A.val 分开( 3 2 3)

© www.soinside.com 2019 - 2024. All rights reserved.