如何获取一个变量的值并将其设置为等于类中的另一个变量?

时间:2014-07-18 23:44:22

标签: python

这是我尝试使用的代码。如果我将getset_pos用作函数而不是此处的方法,则工作正常。 编辑:修正到第6行(getset_pos现在是self.getset_pos); edit2:在末尾添加了对课程的调用

class Main:
    def __init__(self):
        self.i = [5, 5]
        self.o = []

        self.getset_pos(self.i, self.o)

    def getset_pos(self, input, output):
        """ Takes the coord of an item and sets it equal to another item """
        output = []
        for numb in input:
            output.append(numb)
        print output

test = Main()
test

我可以让getset_pos()方法专门用于self.i和self.o变量,但是,我发现这更像是我想要的:

class Main:
    def __init__(self):
        self.i = [5, 5]
        self.o = []

        def getset_pos(input, output):
            output = []
            for numb in input:
                output.append(numb)
            return output

        getset_pos(self.i, self.o)

test = Main()
test

这个函数只允许我在调用这个函数时更容易地将变量的值更新为另一个变量。我只需要在方法中调用它。

2 个答案:

答案 0 :(得分:3)

您不能对作为参数传入的引用执行赋值,并期望该赋值反映在该方法之外。 this question的答案详述了原因。

更直接的方法是简单地使用self引用并跳过传递额外参数。

class Main:
    def __init__(self):
        self.i = [5, 5]
        self.o = []

        self.getset_pos()

    def getset_pos(self):
        """ Takes the coord of an item and sets it equal to another item """
        self.o = []
        for numb in input:
            self.o.append(numb)
        print output

答案 1 :(得分:1)

Python没有处理明显的指针,所以当你搞砸了它时,确切地知道会发生什么事情可能有点尴尬。请查看this以获得良好的概述。

当你调用getset_pos时,output是一个可变的列表。因此,当您使用append方法时,您正在修改传入的变量。但是,由于您在函数内显式设置output = [],因此您不再访问最初传入的变量 - 您已创建新列表