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

2024-10-02 02:30:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在和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”

还有。。。利用这一点是不好的做法吗?如果是这样,有什么更好的选择

(我为这个模糊的标题道歉。我不知道这个问题的标题是什么。)


Tags: 实例nametestselfvardefclassworks
2条回答

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

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

相关问题 更多 >

    热门问题