Python:繼承,父類、子類成員變量內存分配

Python的繼承

子類更新成員變量,但是父類的成員變量不會隨之更新。

import random


class A:
    def __init__(self):
        self.x = 1

    def update(self):
        self.x = random.random()


class B(A):
    def __init__(self):
        super(B, self).__init__()


class C(A):
    def __init__(self):
        super(C, self).__init__()


a = A()
b = B()
c = C()
print('a', a.x, id(a.x))
print('b', b.x, id(b.x))
print('c', c.x, id(c.x))

c.update()
print('-' * 10)
print('a', a.x, id(a.x))
print('b', b.x, id(b.x))
print('c', c.x, id(c.x))

輸出結果如下。

a 1 1588685888
b 1 1588685888
c 1 1588685888
----------
a 1 1588685888
b 0.966045428000231 2041177252680
c 1 1588685888

疑問:繼承後,是各個類各用一份內存來存變量嗎?

 

把上面的代碼,在初始化基類A的時候,x就直接用random來寫,其他不變,測試結果如下。

a 0.41789292733766636 1632024142664
b 0.25028585608102316 1632024142616
c 0.2558405710521733 1632024142160
----------
a 0.41789292733766636 1632024142664
b 0.12166442611660855 1632024142712
c 0.2558405710521733 1632024142160

注意:繼承後,各類成員變量的id。默認是佔用不同的內存,特殊情況下(如同一個常量)才指向同一個內存地址。

複習C++中相應的情況。

Review:C++(13):多繼承(multiple inheritance)

據說,在C++中,“用派生類的方法修改基類的東西要用虛函數”。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章