我是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之间有什么区别?
仅供参考,这是打印出的内容,
创建一个人!
添
临时
答案 0 :(得分:0)
您在name
中分配aname
的{{1}}变量实际上与您最初声明为init
的变量不同 - 它是一个全新的全局变量。例如,您可以在代码末尾添加tmp
:
print name
您的输出将是:
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")
print name
另一种说明这一点的方法是完全改变变量的名称:
A Person is created!
Tim
temp
Tim
还会打印:
class Person():
name = "temp"
def __init__(self, aname):
global asd
print("A Person is created!")
asd=aname
self.test()
def test(self):
print(asd)
print(self.name)
p1 = Person("Tim")
要完成我想要完成的任务 - 即为每个人分配A Person is created!
Tim
temp
属性,请使用name
设置属性。
self.name
(请注意,在class Person():
name = "temp"
def __init__(self, aname):
print("A Person is created!")
self.name=aname
self.test()
def test(self):
print(self.name)
p1 = Person("Tim")
中尝试print(name)
将失败,因为没有具有该名称的范围内属性。)