Python OOP和列表

Mik*_*ikk 4 python class-variables

我是Python的新手,它是OOP的东西,无法让它工作.这是我的代码:

class Tree:

    root = None;
    data = [];

    def __init__(self, equation):
        self.root = equation;

    def appendLeft(self, data):
        self.data.insert(0, data);

    def appendRight(self, data):
        self.data.append(data);

    def calculateLeft(self):
        result = [];
        for item in (self.getLeft()):
            if (type(item) == type(self)):
                data = item.calculateLeft();
            else:
                data = item;
            result.append(item);
        return result;

    def getLeft(self):
        return self.data;

    def getRight(self):
        data = self.data;
        data.reverse();
        return data;

tree2 = Tree("*");
tree2.appendRight(44);
tree2.appendLeft(20);

tree = Tree("+");
tree.appendRight(4);
tree.appendLeft(10);
tree.appendLeft(tree2);

print(tree.calculateLeft());
Run Code Online (Sandbox Code Playgroud)

看起来树2和树正在共享列表"数据"?

目前我希望输出像[[20,44],10,4]这样的东西,但是当我

tree.appendLeft(tree2) 
Run Code Online (Sandbox Code Playgroud)

我得到了RuntimeError: maximum recursion depth exceeded,当我甚至不会appendLeft(tree2)输出[10, 20, 44, 4](!!!).我在这里错过了什么?我正在使用Portable Python 3.0.1.

谢谢

Ned*_*der 9

问题是您已声明data为类变量,因此该类的所有实例共享相同的列表.相反,放入self.data = []你的__init__.

另外,摆脱所有那些分号.它们是不必要的,会使代码混乱.