理解python中的对象关系(混淆)[重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了理解python中的对象关系(混淆)[重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
我对这个例子有点困惑:
>>> class A:
... foo = []
>>> a, b = A(), A()
>>> a
<__main__.A instance at 0x0000000002296A88>
>>> b
<__main__.A instance at 0x0000000002296F88>
>>> a.foo.append(5)
>>> a.foo
[5]
>>> b.foo
[5]
1)python如何连接两个不同的实例?
2)在追加值后,实例是否引用了类A()
或foo
属性?
但是当我添加__init__
方法时,事情看起来不同:
>>> class A:
... def __init__(self):
... self.foo = []
...
>>> a, b = A(), A()
>>> a
<__main__.A instance at 0x00000000021EC508>
>>> b
<__main__.A instance at 0x0000000002296F88>
>>> a.foo.append(5)
>>> a.foo
[5]
>>> b.foo
[]
3)__init__
的魔力是什么?
答案
在第一个示例中,foo
是一个类属性,而不是实例属性。这意味着它在A
的所有实例中共享,您可以查看:
a1 = A()
a2 = A()
print a1.foo is a2.foo
print a1.foo is A.foo
然而,在你的第二个例子中,self.foo = []
使foo
成为一个实例属性,为A
的每个实例独立构建。
另一答案
在第一种情况下,foo = []
在类定义时完成,因此单个列表与类相关联,而不是与实例相关联。
在第二种情况下,self.foo = []
在实例初始化时完成(这是__init__
的实例初始化),因此单独的列表与每个实例相关联。
以上是关于理解python中的对象关系(混淆)[重复]的主要内容,如果未能解决你的问题,请参考以下文章