附加到python对象列表时出错

Isa*_*Liu 2 python oop

我定义了一系列 python 对象,class dofiles其中有一个名称和一些空列表。

class dofile:
    name = ""
    lines = []
    inputs = []
    outputs = []
    intermediates = []
Run Code Online (Sandbox Code Playgroud)

我正在使用以下代码来循环dofile调用这些对象的列表dofiles(在我运行填充我知道可以正常工作的每个对象的行列表的代码之后)。有问题的代码检测到短语 using 及其后面的单词,然后应该将该单词附加到每个对象的输入列表中。

for dofile in dofiles:
    for line in dofile.lines:
        # using
        using_tups = re.findall(r'(using)\s([^\s,]+)', line)
        for tuple in using_tups:
            dofile.inputs.append(tuple[1])
Run Code Online (Sandbox Code Playgroud)

但是,我最终将单词附加到 dofiles 中所有 dofile 对象的输入列表。(例如:print(dofiles[0].inputs)print(dofiles[1].inputs)虽然扫描不同的文件,但返回相同的内容)。

我是否遗漏了 Python 中对象、列表或循环的工作原理?

我试过了,(dofile.inputs).append(tuple[1])但似乎没什么区别。

谢谢。

M Z*_*M Z 5

您正在创建静态变量,即在所有dofile类实例中一致的变量。从本质上讲,发生的事情不是所有 dofile 实例都有一个“输入”列表,而是每个指向一个列表。要使它们特定于单个实例,请在__init__类中初始化它们:

class dofile:
    def __init__(self):
        self.name = ""
        self.lines = []
        self.inputs = []
        self.outputs = []
        self.intermediates = []
Run Code Online (Sandbox Code Playgroud)