当使用多个源文件运行python程序时,构造函数的行为与函数不同

当使用多个源文件运行python程序时,构造函数的行为与函数不同,python,Python,main file.py from resources import * alist[0].update() print (blist) 资源.py class a: def __init__(self): self.x=0 def update(self): global blist blist=blist+[b()] class b: def __init__(self): self.y=0 blist

main file.py

from resources import *
alist[0].update()
print (blist)
资源.py

class a:
    def __init__(self):
        self.x=0
    def update(self):
        global blist
        blist=blist+[b()]
class b:
    def __init__(self):
        self.y=0
blist=[]
alist=[a()]
调用alist[0].update()时,此程序应在blist中创建类b的新实例,但在运行print(blist)后,它只显示一个空列表。我也尝试过同样的代码,其中类a是这样定义的

class a:
    def __init__(self):
        self.x=0
        global blist
        blist=blist+[b()]
    def update(self):
        pass
并且它成功地在列表b中创建了一个实例。我真的需要它来用函数而不是构造函数创建另一个实例,我该怎么做?任何意见都将不胜感激

另外,只有在运行多个源代码文件时才会发生这种情况。

blist=blist+[b()]
重新定义
blist
。它不会修改原始对象,而原始对象正是另一个源文件中的
blist
所指向的对象

您应该
。将
附加到原始列表中:

blist.append(b())

你使用globals有很好的理由吗?在python中,它们通常被认为是非常糟糕的实践。