我是 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());
看起来tree2和tree正在共享列表“数据”?
目前我希望它输出类似 [[20,44], 10, 4] 的内容,但是当我
tree.appendLeft(tree2)
I get RuntimeError: maximum recursion depth exceeded
,当我什至不会appendLeft(tree2)
它输出[10, 20, 44, 4]
(!!!)。我在这里缺少什么?我正在使用可移植Python 3.0.1。
谢谢
问题是你已经声明了data
作为类变量,因此该类的所有实例共享相同的列表。相反,把self.data = []
在你的__init__
.
另外,去掉所有那些分号。它们是不必要的并且会使您的代码变得混乱。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)