以下代码:
#!/usr/bin/python
class TestClass:
container = []
testList = []
for i in range(2) :
testList.append(TestClass())
for j in range(4) :
testList[i].container.append(j)
for i in range(2):
print testList[i].container
返回以下内容:
[0, 1, 2, 3, 0, 1, 2, 3]
[0, 1, 2, 3, 0, 1, 2, 3]
我很困惑为什么......我希望它是:
[0, 1, 2, 3]
[0, 1, 2, 3]
有人可以帮助我,我在这里失踪了吗?我是python的新手我有C / C ++背景。非常感谢!
答案 0 :(得分:4)
这不是你在Python中做会员的方式。
或者更确切地说,当你需要一个类属性时,你就是这样做的:而不是每个TestClass
实例都有自己独立的container
成员,它们都共享一个单身。 (既然你提到了你的C ++背景,这与C ++中的static
成员类似,虽然不完全相同,所以不要试图将这个类比推得太远。)
这不是你想要的;你想要一个实例属性。正常的方法是在__init__
方法中创建一个(就像C ++构造函数一样 - 尽管如此,它不完全像它):
class TestClass:
def __init__(self):
self.container = []
是的,这意味着如果你真的想要,你可以创建两个不同的TestClass
实例,尽管它们属于同一类型,但它们的成员完全不同。
虽然我们在Python 2.x中,但你从不*想写class TestClass:
。请改用class TestClass(object):
。
您可能希望阅读官方教程的Classes章节或其他地方的等效解释。 Python类在很多方面与C ++类有很大的不同。
*有一些例外,你至少可以说是想要它,但你现在不想了解它们。