我已经玩了一段时间我的代码,这个不是关于一个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)
但是,非常感谢你阅读。
答案 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)
main
是class
不是函数。因此,class
声明中包含的代码会立即运行,因为所有语句都在代码中出现时执行。当达到方法声明时,它作为成员绑定到类,所以在某种程度上方法也可以执行,但不会被调用。
答案 3 :(得分:1)
当Python读取您的代码时,它会查看类变量并定义所有变量。然后,它进入class main并在那里执行代码,以及定义 init 。 Python只执行函数定义中没有的任何内容。