了解Python中的实例变量

时间:2014-12-03 01:49:34

标签: oop

我对这个程序的输出感到有些困惑:

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而其他两行不打印。

由于

2 个答案:

答案 0 :(得分:0)

instance = Test(3) #Output is None

这是“无”,因为您在分配之前打印self.a

print Test.a  #Output is None

这是None b,因为您在Class中打印A,但尚未初始化,因此只处理了a = None类定义。

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

这会打印3,因为您在第一次调用时创建的Test类的实例上调用它。已经运行了__init__,并将self.a修改为您提供的3(由于调用Test.a后它与上面不同,因此未调用__init__方法,因此您获得你从班级定义中的作业

答案 1 :(得分:0)

通常一个写实例小写(我修复它)。

为了阅读你的节目。

  • 进入init。
    • 我应该打印self.a
      • 当前实例是否具有a属性?号
      • 好的,看一下那些类型。
      • Test通常是否具有a属性?是的,它是None
      • 好的,打印None
    • self.a设为3
      • 此实例是否具有a属性?号
      • 确定创建并为其赋予值3
  • a对象的默认Test值是多少?它没有。打印出来。
  • 此实例的a值是多少?它的3。

举个更人性的例子。

通常,未命名的人名为John Doe。

有人昏迷不醒,早上8点进入医院。他的名字是什么? (不知道,让我们写下#34; John Doe")

8岁进入的人的姓名是什么? " John Doe"

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

8岁进入的人的姓名是什么? "鲍勃"

当有人昏迷进入医院时,他的名字是什么? " John Doe" (没有变成" Bob")

如果另一名患者进入并且她的身份证是#34; Alice",她的名字是什么?可能" Alice"