Python 类继承没有给我单独的列表实例

我不明白这是怎么回事。我有一个类“C”,它是“B”的子类。“B”有一个属性“b”,它是类“A”的一个实例。“A”有一个属性,称为“a”的列表。当我初始化“C”的两个不同实例时,它们具有相同的“A”实例,这样当我附加到 Aa 时,它会导致“C”的两个实例都具有附加属性“ba”。


class A:

    a = list()


class B:

    b = A()


class C(B):

    pass


one = C()

two = C()

one.b.a.append('one')

one.b.a.append('two')

two.b.a.append('three')


print(one.b.a)

print(two.b.a)

运行这段代码打印出:


['one', 'two', 'three']

['one', 'two', 'three']

显然,one.ba 和 two.ba 指向同一个对象,而我本以为每次调用 C() 时都会初始化“A”的新实例。为什么会发生这种情况,我该如何解决?


慕虎7371278
浏览 133回答 1
1回答

慕仙森

这是因为您将aand声明b为类属性而不是实例变量。您可以将类属性视为该类的全局变量。所有对象的类属性只能有一个值。另一方面,实例变量对于类的每个实例都是唯一的。总结一下:class A:    a = 'A'        def __init__(self):        self.b = 'B'foo = A()bar = A()foo.a>>> Abar.a>>> Afoo.b>>> Bbar.b>>> BA.a = 'C'foo.a>>> Cbar.a>>> Cfoo.b = 'D'bar.b>>> B
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python