Python类继承:这个输出是如何产生的?

时间:2018-05-20 10:30:26

标签: python class oop object inheritance

当我运行此代码时,它输出为10 10 10 12 24 10.有谁可以帮助我理解输出?我是python编程的新手

class A:
    x = 10

class B(A):
    pass

class C(A):
    pass

print (A.x)

print (B.x)

print (C.x)

A.x += 2

B.x *= 2

C.x -= 2

print (A.x)

print (B.x)

print (C.x)

1 个答案:

答案 0 :(得分:0)

我不知道你知道哪种编程语言,但Python在这里的工作方式与其他语言不同。在C ++中,您只需假设变量x作为自己的实例存在3次,这意味着变量彼此独立。这将导致输出序列10 10 10 12 20 8。

但是,我认为对于Python,会发生以下情况:

  • 使用变量x = 10创建A类。在创建B类和C类时,它们不会实例化自己的变量x。相反,B和C对A.x有一个“参考”。这就是你最初获得10 10 10的原因。
  • 你改变A.x + = 2,所以现在x = 12。当您更改B.x * = 2时,则对B.x进行以下分配:B.x = A.x * 2.从此刻开始,B.x是一个自己的变量,独立于A.x. C.x - = 2也是如此。这导致你进入序列12 24 10。

我认为对于Python,你需要知道“按对象调用”的概念,这是无所不在的。它与已知概念的不同之处在于“按值调用”或“按引用调用”。另请参阅Is Python call by reference or value