我一直在和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实例的“\u test1”字段的“\u name”字段。我所期望的是test = self.getTest1()
行将创建一个绑定到名称“test”的新test1实例,该名称将是test2实例的“\uu test1”字段的副本。然后test.setName(name)
行将更改新“test”变量的“\uu name”字段,而不是test2实例的“\uu test1”字段的“\uu name”字段
简而言之:为什么这个脚本要打印“this works…”而不是“Test”
还有。。。利用这一点是不好的做法吗?如果是这样,有什么更好的选择
(我为这个模糊的标题道歉。我不知道这个问题的标题是什么。)
函数getTest1(self)不创建新实例,它只返回现有实例
普通赋值不会复制Python中的任何内容
test = self.getTest1()
不将test
设置为self.__test1
的副本;它将test
设置为与self.__test1
相同的对象。谷歌和搜索这个网站的字面上成千上万的其他问题和讨论相关问题 更多 >
编程相关推荐