Python object containing an array of objects being weird
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
Static class variables in Python
Python OOP and lists
只是想知道我能不能得到一些帮助。
我正在使用python,遇到了一个障碍,我似乎无法用正在开发的小程序来解决这个问题。这是我的问题(使用一个非常简单和不相关的示例):我有一个类:
1 2 3 | class dog: name = '' friends = [] |
我用它做了几个物体:
1 2 | fido = dog() rex = dog() |
这就是我被卡住的地方。我不知道为什么会发生这种事,我还没弄清楚。不过,我假设我对某件事的理解有缺陷,任何解释都会很好。所以这里是我的问题,如果我将一个对象附加到另一个对象上(看起来应该可以正常工作):
1 | fido.friends.append(rex) |
…事情搞砸了。如您所见:
1 2 3 4 5 6 | >>> fido.friends.append(rex) >>> fido.friends [<__main__.dog instance at 0x0241BAA8>] >>> rex.friends [<__main__.dog instance at 0x0241BAA8>] >>> |
这对我来说没什么意义。难道不应该只有菲多朋友才有东西在里面吗?即使我做了一个新的物体:
1 | rover = dog() |
它有一个狗实例,我们可以看到它是我们的"rex"对象。
1 2 3 4 5 6 7 8 | >>> rex.name ="rex" >>> fido.friends[0].name 'rex' >>> rex.friends[0].name 'rex' >>> rover.friends[0].name 'rex' >>> |
这是不合理的,我希望能得到一些帮助。我到处找了一会儿,想找个解释,但没有。对不起,如果有类似的问题我错过了。
(P)如果each dog should have his own list of friends,you must use instance attributes:(p)字母名称(P)What you used were class attributes(the value is shared among instances).More on this:(p)
- http://www.diveintopython.net/object-u oriented?u framework/class?u attributes.html
(P)变量声明内的分类,而不是一个瞬间,是Python中的统计变量。(p)
(P)The proper way to achieve what you want to do is the use of the EDOCX1(p)字母名称
(P)To avoid this,put your variable declaration within a EDOCX1 symposible 0 function,like so:(p)字母名称