为什么这堂课会跑呢?

时间:2015-08-05 18:10:02

标签: python python-3.x

我已经玩了一段时间我的代码,这个不是关于一个bug或任何东西,但我只是不明白为什么类main()运行而不需要初始化它... < / p>

class vars():
    var1 = "Universe!"
    var2 = "Oscar!"
    var3 = "Rainbow!"

class main():
    print (vars.var1)
    def __init__(self):
        print (vars.var2)
        print (vars.var3)

但是,非常感谢你阅读。

4 个答案:

答案 0 :(得分:7)

与许多其他语言不同,类体是Python中的可执行语句,并在解释器到达class行时立即执行。当你运行这个“程序”时:

class Foo:
    print("hey")

它只打印“hey”而没有创建任何Foo对象。

这同样适用于函数定义语句def(但不适用于函数体)。当你运行它:

def foo(arg=print("hi")):
    print("not yet")

它打印“hi”,但不打印“还没有”。

答案 1 :(得分:6)

创建类时,Python会直接在新名称空间中的类声明中执行所有代码。这样,在类中创建的任何变量(最常见的方法,由普通函数声明创建,如def foo(self...))都附加到类而不是全局。

但代码仍然立即运行。如果它调用print()或者做了一些会产生可见副作用的东西,那么现在就会发生,而不是在实例化类时(调用它来创建一个新实例)。如果在实例化类时需要执行某些操作,请改为编写__init__()方法。

答案 2 :(得分:1)

mainclass不是函数。因此,class声明中包含的代码会立即运行,因为所有语句都在代码中出现时执行。当达到方法声明时,它作为成员绑定到类,所以在某种程度上方法也可以执行,但不会被调用。

答案 3 :(得分:1)

当Python读取您的代码时,它会查看类变量并定义所有变量。然后,它进入class main并在那里执行代码,以及定义 init 。 Python只执行函数定义中没有的任何内容。