2014-12-03 42 views
0

我稍微这个程序的输出困惑:理解实例变量

class Test(object): 
    a = None 
    b = None 

    def __init__(self, a): 
     print self.a 
     self.a = a 
     self._x = 123; 
     self.__y = 123; 
     b = 'meow' 

输出以下行有什么让我困惑:

instance = Test(3) #Output is None 
print Test.a #Output is None 
print instance.a #Output is 3. Why does this print 3? 

我跟为什么print Instance.a挣扎打印3和其他两行不。

感谢

回答

0
instance = Test(3) #Output is None 

这是没有的,因为你打印self.a已分配之前。

print Test.a #Output is None 

这是无B,因为要打印在类,其尚未被初始化尚未所以只有在类定义的一个=无已处理完毕。

print instance.a #Output is 3. Why does this print 3? 

此打印3,因为你是在你第一次调用创建的Test类的实例调用它。 __init__已运行,并修改self.a为您提供的3(这是从上面不同的,因为调用Test.a,该__init__方法不叫,所以你从类定义

0

通常一个让您的作业写小写情况下(我固定它)

为了阅读你的程序

  • 进入初始化
    • 我应该在打印self.a:。
      • 当前实例是否具有a属性?没有。
      • 好的,看看类型。
      • Test通常具有a属性吗?是的,这是None
      • 确定,打印None
    • 设置self.a3
      • 这个实例是否有a属性?没有。
      • 确定创建它并将其值设为3
  • 什么默认aTest对象?它没有。打印它。
  • 这个实例的值为a?它是3.

举一个更人性化的例子。

通常不知名的人被命名为John Doe。

有人无意识上午8点进入医院。他的名字是什么? (不知道,让我们写“John Doe”吧)

进入8的人的名字是什么? “John Doe”

他醒了,嘿你叫什么名字?我是Bob

以8输入的人的姓名是什么? “Bob”

当有人昏迷进入医院时,他叫什么名字? “John Doe”(没有改变为“Bob”)

如果另一个病人进入,她的Id是“Alice”,她叫什么名字?可能是“爱丽丝”