设计对象时同一变量的多个值(在Python中使用self)

2024-04-26 18:54:38 发布

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

我对python不熟悉(对编程并不陌生),我一直在胡思乱想“self”。我取得了很大的进步,但后来我发现了一些有趣的东西,与我的小程序乱搞。我创建了一个名为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的方法,该方法输出两个内容。第一个实际打印的是我在构造函数中设置name的内容(在本例中是“Tim”,正如您在最后一行代码中看到的),但是第二个打印的是“temp”,这是我初始化name的内容。这些值不应该相同吗?在我的场景中使用和不使用self有什么区别?你知道吗

仅供参考,以下是打印出来的内容

A Person is created!

Tim

temp


Tags: 方法代码nametestself程序内容is
1条回答
网友
1楼 · 发布于 2024-04-26 18:54:38

init中分配给anamename变量实际上与最初声明为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")

(请注意,尝试在test()print(name)将失败,因为没有具有该名称的范围内属性。)

相关问题 更多 >