他の人が指摘したように、2 番目print
のステートメントは、クラス宣言を構成する一連のステートメントの 1 つであるため、実行されています。imported
宣言が最上位コードの一部であるため、モジュールが含まれているときにすべてが実行されます。関数またはメソッド内にネストされていることとは対照的です。
最初のprint
ステートメントはメソッド定義の一部であるため実行されません。メソッド定義のステートメントは呼び出されるまで実行されません --- クラス定義内のステートメントとは異なります。通常、クラスの__init__()
インスタンスがクラスの名前を使用して作成されると、クラスのメソッドが間接的に呼び出されます。これは、あなたのようなd()
名前のクラスになります。d
したがって、表示される文字列のテキストの内容と矛盾しprint
ますが、クラスのインスタンスが作成されたときにのみその 2 番目のステートメントを実行するには (最初のステートメントと同様)、同じメソッドの一部にする必要もあります。 (またはそれによって呼び出されます)。つまり、その後、クラスが含まれているファイルが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