为什么这堂课会跑呢?

Ako*_*ruz 2 python python-3.x

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

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

class main():
    print (vars.var1)
    def __init__(self):
        print (vars.var2)
        print (vars.var3)
Run Code Online (Sandbox Code Playgroud)

但是,非常感谢你阅读.

geo*_*org 7

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

class Foo:
    print("hey")
Run Code Online (Sandbox Code Playgroud)

它只是打印"嘿"而没有Foo创建任何对象.

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

def foo(arg=print("hi")):
    print("not yet")
Run Code Online (Sandbox Code Playgroud)

它打印"hi",但不打印"尚未".


Kev*_*vin 6

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

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