关于类:包含一组奇怪对象的python对象

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)字母名称