Python 为什么要执行这些类定义中的代码?
据说 缩进级别为0的所有代码都将被执行。 已定义的函数和类是已定义的,但它们都不是 他们的代码开始运行 但是,如果我有以下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
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
语句,创建函数对象,但不会调用函数
在您的例子中,类定义中的代码除了定义函数外,还有其他功能。这允许您使用设置类对象初始状态的代码。这些代码是作为处理
类语句的一部分执行的,因此此时您可以看到它们的副作用。因为这些代码是它们定义的一部分,它不在方法中。