[英]How does this python script work?
我一直在搞弄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”?
另外...利用這種做法是不好的做法嗎? 如果是這樣,哪個更好的選擇?
(我為模糊的標題表示歉意。我不知道該問題的標題是什么。)
普通分配不會在Python中復制任何內容。 test = self.getTest1()
不會將test
設置為self.__test1
的副本; 它將test
設置為與self.__test1
相同的對象。 Google並在此站點上搜索有關此問題的數千個其他問題和討論。
函數getTest1(self)不會創建新實例,它只會返回現有實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.