簡體   English   中英

這個python腳本如何工作?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM