ITPub博客

首页 > 应用开发 > > Python 类的组合产生的问题

Python 类的组合产生的问题

作者:supergirlxu 时间:2019-08-30 08:54:01 0 删除 编辑

问题:类属性定义了另一个类的对象时,为什么会产生全局改变的效果?

举例:

class A:
    t = 1

s1 = A()
s2 = A()

s1.t = 2
print(s2.t)
>>>  1
#这样显然是一个对象改变了它的属性,但是不会对其他对象产生影响

但是我也知道有一些例外

class A:
    L = []

s1 = A()
s2 = A()
s1.L.append(1)
print(s2.L)

>>>1
# 当类属性是一个列表时,对象改变属性会产生全局效果

接下来是我的问题:

class A:
    x = 1
class B:
    t = A()   #类的组合,类属性是另一个类的对象

s1 = B()
s2 = B()
s1.t.x = 2
print(s2.t.x)

>>>2
#类的组合情况下,一个对象改变属性,也产生了全局的效果,另一个对象的属性也被改变

#我开始觉得,这和list是一种情况,操作可变对象改变了类属性,自然由这个类创建的实例的属性也全被改变了

#但是我打印了A.x  发现,类属性并没有变,还是1

#倒这我就想不通了,为什么类属性并没有变,我另一个对象根本没有赋值会被改变值呢




#希望各位指点
#感谢任何形式的回答


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/644/viewspace-3163074/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-04-12

  • 博文量
    220
  • 访问量
    1688