用for循环创建对象列表(python)

时间:2015-04-17 04:45:24

标签: python arrays class object for-loop

以下代码:

#!/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 ++背景。非常感谢!

1 个答案:

答案 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 ++类有很大的不同。


*有一些例外,你至少可以说是想要它,但你现在不想了解它们。