Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 理解Python中的实例变量_Oop - Fatal编程技术网

Oop 理解Python中的实例变量

Oop 理解Python中的实例变量,oop,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

我对这个程序的输出有点困惑:

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?
我正在苦苦思索为什么打印实例。a打印3,而其他两行不打印

谢谢

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

print Test.a  #Output is None
这是None b,因为您正在类中打印A,该类尚未初始化,因此只有A=未处理任何类定义

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

这将打印3,因为您是在使用第一次调用创建的
Test
类的实例上调用它的
\uuuu init\uuuuuuuuu
已经运行,并将self.a修改为您提供的3(由于调用了
Test.a
,因此与上面不同,
\uuuuuu init\uuuuuuuuuu
方法没有被调用,因此您可以从类定义中获得赋值通常是一个小写的写实例(我修复了它)

为了阅读你的程序

  • 进入init。
    • 我应该打印
      self.a
      • 当前实例是否具有
        a
        属性?否
      • 好的,那么看看这些类型
      • Test
        是否通常具有
        a
        属性?是的,它是
        None
      • 好的,打印
        None
    • self.a
      设置为
      3
      • 此实例是否具有
        a
        属性?否
      • 确定创建它并给它赋值
        3
  • Test
    对象的默认
    a
    值是多少?没有。打印它
  • 对于这个实例,
    a
    的值是多少?它是3
举一个更人性化的例子

通常未成年的人叫约翰·多伊

早上8点有人昏迷进入医院。他叫什么名字?(不知道,我们写“约翰·多伊”)

8点进入的人叫什么名字?“约翰·多伊”

他醒了,嘿,你叫什么名字?我叫鲍勃

在8点输入的人叫什么名字?“鲍勃”

当有人昏迷进入医院时,他叫什么名字?“约翰·多伊”(没有改为“鲍勃”)

如果另一位患者进来,她的Id是“Alice”,她叫什么名字?可能是“Alice”

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