Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将用户类对象添加到对象列表中_Python - Fatal编程技术网

Python 如何将用户类对象添加到对象列表中

Python 如何将用户类对象添加到对象列表中,python,Python,我试图将对象附加到对象列表中,但对象类的所有属性都与最后一个条目相同 我发现在for循环中声明对象可以解决问题,但不明白为什么。。。 (似乎列表中的所有对象都指向同一个对象) 首先,我宣布: 这项工作: 这不起作用(“simplelist[].name”中的所有值都等于3)-为什么? x=SimpleClass()创建(类似于此类型的对象) 如果在循环外运行它,则正好有一个对象并尝试更改它simplelist.append(x)在这种情况下,会将这个唯一的对象附加到列表中(并且每次都会更改),因

我试图将对象附加到对象列表中,但对象类的所有属性都与最后一个条目相同

我发现在for循环中声明对象可以解决问题,但不明白为什么。。。 (似乎列表中的所有对象都指向同一个对象)

首先,我宣布: 这项工作: 这不起作用(“simplelist[].name”中的所有值都等于3)-为什么?
x=SimpleClass()
创建(类似于此类型的对象)

如果在循环外运行它,则正好有一个对象并尝试更改它
simplelist.append(x)
在这种情况下,会将这个唯一的对象附加到列表中(并且每次都会更改),因此您将拥有一个包含一个对象的多个副本的列表

如果在循环中运行它,则会有几个不同的对象实例化一个类
simplelist.append(x)
在本例中,会将每个新对象追加到列表中,这样您就有了一个包含许多不同对象的列表

从官方Python文档:

类实例化使用函数表示法。假设class对象是一个无参数函数,它返回类的一个新实例。例如(假设上述类别):

x=MyClass()

创建类的新实例,并将此对象指定给局部变量x

实例化操作(“调用”类对象)创建一个空对象。许多类喜欢创建对象,并根据特定的初始状态自定义实例


在第二种情况下,只创建类的一个对象。然后更改此对象,并以此更改列表中对象的所有现有副本。

这是因为您只创建了一个对象,并将其添加到列表中4次。所有对象(因此是相同的4倍)将具有与name相同的值,这将是3,因为这是您在
循环中所做的最后一次修改

在您的例子中,
x
SimpleClass
类的一个实例。实际上,它是一个引用/指针,在
for
循环中不会更改。您只需更改
SimpleClass
类的
name
属性的值。因此,您的列表将包含相同的引用3次。

因为您使用的是相同的对象。在for循环中移动x的初始化。在最近的编辑中,您甚至可以回答自己的问题。那么,你的问题到底是什么呢?这么看,.append()并没有创建一个对象并复制到它,它只是链接我创建的列表对象?
class SimpleClass:
    name = ""
simplelist = []
for count in range(4):
    x = SimpleClass()
    x.name = count
    simplelist.append(x)
x = SimpleClass()
for count in range(4):    
    x.name = count
    simplelist.append(x)