我一直在搞乱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”?
另外......利用这个是不好的做法?如果是这样,什么可能是更好的选择?
(我为模糊的标题道歉。我不知道该问题的标题。)
答案 0 :(得分:1)
普通赋值不会复制Python中的任何内容。 test = self.getTest1()
未将test
设置为self.__test1
的副本;它将test
设置为与self.__test1
相同的对象。谷歌和搜索这个网站的数千个其他问题和讨论。
答案 1 :(得分:1)
函数getTest1(self)不会创建新实例,只会返回现有实例。