【发布时间】:2014-08-02 21:56:13
【问题描述】:
我是 python 新手(不是编程新手),我一直在搞乱“自我”的想法。我取得了长足的进步,但后来我发现搞乱我制作的一个小程序很有趣。我创建了一个名为 Person 的对象。这是我整个程序的代码。
class Person():
name = "temp"
def __init__(self, aname):
global name
print("A Person is created!")
name=aname
self.test()
def test(self):
print(name)
print(self.name)
p1 = Person("Tim")
如您所见,我创建了一个名为“name”的变量。在构造函数中,我传入一个名为“aname”的变量并将其分配给变量“name”。在构造函数的末尾,我调用了一个名为 test 的方法,它打印出两件事。第一个实际上打印了我在构造函数中设置的名称(在本例中为“Tim”,如代码的最后一行所示),但第二个打印“temp”,这是我将“name”初始化为.价值观不应该一样吗?在我的场景中使用和不使用 self 有什么区别?
仅供参考,这是打印出来的,
创建了一个人!
提姆
温度
【问题讨论】:
-
当您实例化多个
Person时,差异将变得明显。你会发现他们共享同一个name——也就是说,修改一个Person与修改所有Person是一样的。这可能不是你想要的。 -
但是为什么 'name' 指向的值变成了 'Tim' 呢?为什么'self.name'会变成“temp”?值应该相同。
-
@WaleedKhan 的回答虽然准确地描述了创建多个
Person对象时会发生什么,但在技术上是不正确的。设置为 Tim 的name不是您最初分配给"temp"的name- 它们属于两个不同的命名空间和范围。
标签: python variables python-3.x self