:あなたがオブジェクトのインスタンスを作成するまで実行されません
class F(Exception):
sys.stderr.write('Inside exception\n')
はこのことを考慮し、クラス定義が実行されるとすぐにクラス本体が実行されます。
コードでは、クラスFの定義がこのコマンドの上にあります。sys.stderr.write('Before Exception\n')
したがって、sys.stderr.write('Inside exception\n')
が最初に実行され、その結果が最初に表示されます。試験として
、このプログラムを実行する -
import sys
sys.stderr.write('Before Exception\n')
sys.stderr.flush()
class F(Exception):
sys.stderr.write('Inside exception\n')
sys.stderr.flush()
pass
try:
raise F
except F:
pass
出力、今あなたが得るある -
Before exception
Inside Exception
クラス定義が実行される前の文sys.stderr.write('Before Exception\n')
が実行されますので、これは単純です。
Infactでは、Inside Exception
の印刷は、raise
を使用してFのインスタンスを初期化することとは関係ありません。 Fのインスタンスを初期化したかどうかにかかわらず、印刷されます。
これを試してみてください -
import sys
class F(Exception):
sys.stderr.write('Inside exception\n')
sys.stderr.flush()
pass
それでもあなたはこの出力を取得します -
Inside Exception
あなたはクラスのインスタンスを行っていないもののF.