修改类中的对象会导致错误

时间:2017-09-15 16:19:28

标签: python-2.7 class object tree runtime-error

我是Python的初学者,我正在努力更好地理解树木。为什么我不能在下面的函数f中添加节点?我希望最终的打印返回值2,而不是f(test)None的错误。

class Testcls(object):
        def __init__(self,data):
            self.data= data
            self.children = []

        def add_child(self,obj):
            self.children.append(obj)

def f(test):
        data1 = test.data+1
        test.add_child(Testcls(data1))

test = Testcls(1)
print f(test).data

1 个答案:

答案 0 :(得分:0)

您案例中的最终打印实际上应该返回错误。函数f不返回任何内容(因此如果您键入None则为print f(test)。要使用f添加子项,您可以添加一个return语句:

def f(test):
    data1 = test.data+1
    test.add_child(Testcls(data1))
    return test

现在返回您可以进一步访问和处理的对象test

f(test)
print test.children[0].data

由于它实际返回test对象,您也可以调用它并直接使用它:

print (f(test).children)[0].data

您不必拥有return语句 - f仍会更改您发送给它的对象。如果您不想返回该对象,您只需要单独调用该函数,然后使用test,如第二个代码段所示。