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

时间:2014-08-02 21:56:14

标签: python variables python-3.x self

我是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之间有什么区别?

仅供参考,这是打印出的内容,

  

创建一个人!

     

     

临时

1 个答案:

答案 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)将失败,因为没有具有该名称的范围内属性。)