为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕虎7371278 2023-05-09 16:15:51
我不明白这是怎么回事。我有一个类“C”,它是“B”的子类。“B”有一个属性“b”,它是类“A”的一个实例。“A”有一个属性,称为“a”的列表。当我初始化“C”的两个不同实例时,它们具有相同的“A”实例,这样当我附加到 Aa 时,它会导致“C”的两个实例都具有附加属性“ba”。class A:    a = list()class B:    b = A()class C(B):    passone = 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”的新实例。为什么会发生这种情况,我该如何解决?
查看完整描述

1 回答

?
慕仙森

TA贡献1827条经验 获得超7个赞

这是因为您将aand声明b为类属性而不是实例变量。您可以将类属性视为该类的全局变量。所有对象的类属性只能有一个值。

另一方面,实例变量对于类的每个实例都是唯一的。

总结一下:

class A:

    a = 'A'

    

    def __init__(self):

        self.b = 'B'


foo = A()

bar = A()


foo.a

>>> A


bar.a

>>> A


foo.b

>>> B


bar.b

>>> B


A.a = 'C'

foo.a

>>> C

bar.a

>>> C


foo.b = 'D'

bar.b

>>> B


查看完整回答
反对 回复 2023-05-09
  • 1 回答
  • 0 关注
  • 106 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信