Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.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
Python 为什么要执行这些类定义中的代码?_Python_Class_Main - Fatal编程技术网

Python 为什么要执行这些类定义中的代码?

Python 为什么要执行这些类定义中的代码?,python,class,main,Python,Class,Main,据说 缩进级别为0的所有代码都将被执行。 已定义的函数和类是已定义的,但它们都不是 他们的代码开始运行 但是,如果我有以下foo.py: print("Line 1") class HelloWorld: print(__name__) if True: print("Hello, World!") class Hello2: print(__name__) print("Hello 2") def functionA(): p

据说

缩进级别为0的所有代码都将被执行。 已定义的函数和类是已定义的,但它们都不是 他们的代码开始运行

但是,如果我有以下
foo.py

print("Line 1")


class HelloWorld:
    print(__name__)
    if True:
        print("Hello, World!")


class Hello2:
    print(__name__)
    print("Hello 2")


def functionA():
    print("Running code in function")
我希望只打印“第1行”,但当我运行它时,我得到

Line 1
__main__
Hello, World!
__main__
Hello 2
为什么要执行类中的代码?

因为python在执行文件时需要“构建”类,而这部分代码是“构建”过程的一部分

该类在程序的生命周期中只生成一次。 例如,如果在脚本末尾添加

instanceOne=HelloWorld()
instanceTwo=Hello2()

您将看到不会再次执行任何打印语句。

您引用的另一个答案是正确的,但“缩进0处的所有代码都已执行”并不意味着“其他缩进级别的代码均未执行”。在这种情况下,处理
class
语句(缩进0处)需要执行它们包含的缩进代码

显然,这一行是执行的,并且执行您期望的操作:

print("Line 1")
最后执行该块,定义一个函数。该函数从未被调用,因此该print语句没有实际执行

def functionA():
    print("Running code in function")
还将执行这两个类定义。执行类定义将创建一个类对象。为了初始化该类对象,将执行类定义中的代码。通常,这将由
def
语句组成,用于定义类中的函数。与独立的
def
示例一样,将执行
def
语句,创建函数对象,但不会调用函数


在您的例子中,类定义中的代码除了定义函数外,还有其他功能。这允许您使用设置类对象初始状态的代码。这些代码是作为处理
语句的一部分执行的,因此此时您可以看到它们的副作用。

因为这些代码是它们定义的一部分,它不在方法中。