这个python脚本是如何工作的?

时间:2015-11-30 04:36:31

标签: python oop reference

我一直在搞乱python而且我遇到了一些我无法解决的问题。我有以下代码:

class test1:

    def __init__(self):
        self.__name = "Test"

    def getName(self):
        return self.__name

    def setName(self, name):
        self.__name = name

class test2:
    def __init__(self):
        self.__test1 = test1()

    def getTest1(self):
        return self.__test1

    def setTest1Name(self, name):
        test = self.getTest1()
        test.setName(name)

var = test2()
var.setTest1Name("This works...")

print var.getTest1().getName() #returns "This works" rather than "Test"

这让我感到困惑的是setTest1Name()方法实际上更改了test2实例的“__test1”字段的“__name”字段。我期望的是test = self.getTest1()行将创建一个绑定到名称“test”的新test1实例,该实例将是test2实例的“__test1”字段的副本。然后test.setName(name)行将更改新“test”变量的“__name”字段,但不会更改test2实例的“__test1”字段的“__name”字段。

简而言之:为什么这个脚本会打印“This works ...”而不是“Test”?

另外......利用这个是不好的做法?如果是这样,什么可能是更好的选择?

(我为模糊的标题道歉。我不知道该问题的标题。)

2 个答案:

答案 0 :(得分:1)

普通赋值不会复制Python中的任何内容。 test = self.getTest1()未将test设置为self.__test1的副本;它将test设置为与self.__test1相同的对象。谷歌和搜索这个网站的数千个其他问题和讨论。

答案 1 :(得分:1)

函数getTest1(self)不会创建新实例,只会返回现有实例。