正如其他人指出的那样,第二个print
语句正在执行,因为它是构成类声明的一组语句之一——所有这些语句在它们所在的模块时执行是imported
因为声明是其顶级代码的一部分它被嵌套在函数或方法中。
第一条print
语句不会执行,因为它是方法定义的一部分,其语句在被调用之前不会执行——与类定义中的语句不同。通常,__init__()
当使用类的名称创建类的实例时,会间接调用类的方法,该名称d()
适用于与您的名称d
类似的名称。
因此,尽管它与正在显示的字符串文本中的内容相矛盾,但要使第二print
条语句仅在创建类的实例时执行(就像第一个一样),您还需要使其成为同一方法的一部分(或被它调用)。换句话说,这样做之后,当类所在的文件被import
编辑时,它们都不会执行,但是当类的任何实例被创建时,它们都会执行。这就是我的意思:
文件x.py
:
class d:
def __init__(self):
print 'print this will NOT be printed' # not true
print "this will be printed when object is created"
文件b.py
:
import x # no print statements execute
obj = d() # both print statements will be executed now