我刚刚在Python2.6中发现了一些有趣的东西,并且想知道这应该是这样还是有错误。
以下是代码:
class Test:
def __init__(self, test):
self.test = test
def test1(self, testarg1):
self.test2(testarg1)
return testarg1
def test2(self, testarg1):
testarg1[0] = 9
p1 = Test('test')
print (p1.test1([1,2,3]))
所以上面的代码作为结果列表返回[9,2,3],但是使用test2
函数我永远不会返回修改后的列表。还要记住,在同一个类的函数中为参数赋予相同的名称并不酷,更改变量名称没有帮助。
即使将函数testarg1
中的test1
完全分配给另一个变量并传递它也无助于仍然返回上面的结果。有人进一步解释为什么会这样吗?
答案 0 :(得分:0)
由于Jean-Francois已经解释过所有内容都通过引用传递,并且您已经更改了test2中的列表。如果您的目标是了解方法覆盖,请查看此示例
class Parent(object):
def __init__(self):
self.value = 5
def get_value(self):
return self.value
class Child(Parent):
def get_value(self):
return self.value + 1
子类和父类中的方法具有相同的名称,这是至关重要的。 那我们就有了
c = Child()
c.get_value()
6