Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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_List_Loops_Object - Fatal编程技术网

Python在循环中创建对象时会将项附加到同一列表而不是新列表

Python在循环中创建对象时会将项附加到同一列表而不是新列表,python,list,loops,object,Python,List,Loops,Object,我有一个在循环中创建对象的代码。对象有一个包含不同类型对象的列表 class A: a = '' def __init__(self): pass class B: def __init__(self): pass list_of_A = list() for i in range(3): _b = B() for j in range(2): _a = A() _b.list_o

我有一个在循环中创建对象的代码。对象有一个包含不同类型对象的列表

class A:
    a = ''
    def __init__(self):
        pass

class B:
    def __init__(self):
        pass
    list_of_A = list()

for i in range(3):
    _b = B()
    for j in range(2):
        _a = A()
        _b.list_of_A.append(_a)
    print(len(_b.list_of_A))
输出为: 2. 4. 六,

我所期望的是: 2. 2. 二,

我尝试删除内部循环末尾的
\u b
。但是没有起作用。
如何确保循环创建一个新的B对象。

一种方法是将a的
list\u
作为一个实例变量,这样每次创建对象时它都会创建一个新列表:

class B:
    def __init__(self):
        self.list_of_A = list()   # or = []
当您有以下安排时:

class B:
    def __init__(self):
        pass
    list_of_A = list()

list\u of A
由该类的所有对象共享(因为这是一个类变量),因此您将附加到同一个list对象。

一种方法是使
list\u of A
成为一个实例变量,这样每次创建对象时它都会创建新的列表:

class B:
    def __init__(self):
        self.list_of_A = list()   # or = []
当您有以下安排时:

class B:
    def __init__(self):
        pass
    list_of_A = list()
该类的所有对象都共享一个列表(因为这是一个类变量),因此您将附加到同一个列表对象。

执行以下操作:

class B:
    def __init__(self):
        self.list_of_A = list()
原因:类变量(或静态变量)与实例变量

在您的代码中,
list\u of_A
是一个类变量(或静态变量),因此它对于类B的所有对象(或实例)都是相同的。 在上面建议的代码中,
list\u of_A
是一个实例变量,因此它对于类B的每个对象(或实例)都是不同且唯一的。

执行以下操作:

class B:
    def __init__(self):
        self.list_of_A = list()
原因:类变量(或静态变量)与实例变量

在您的代码中,
list\u of_A
是一个类变量(或静态变量),因此它对于类B的所有对象(或实例)都是相同的。 在上面建议的代码中,
list\u of_A
是一个实例变量,因此它对于类B的每个对象(或实例)都是不同的和唯一的。

list\u of_A=list()
移动到
\u init\u
中,并预先添加
self,即
def\u init\u(self):self.list\u of_A=list()
。顺便说一句,
list()
可以是
[]
。将
list\u of_A=list()
移动到
\u of_A=list(),并预先结束
self.
,即
def\u init\u(self):self.list\u of A=list()
。顺便说一句,
list()
可以是
[]