OOPの1つの基本的な質問。
test.py
ファイルの内容:
class test(object):
def __init__(self):
print 'INIT of test class'
obj=test()
次に、別のファイルを開きました。
上記のテストクラスから継承しました。
from test import test
class test1(test):
def __init__(self):
pass
したがって、このクラスを実行すると、親クラスからのinitが実行されます。
私はそれを使用することでそれを回避できることを読みました
if __name__='__main__'
これを克服することはできますが、私の質問は、このクラスを2番目のファイルにのみインポートしているのに、なぜ親クラスのinitが実行されているのか、オブジェクト作成コードはどのように実行されたのかということです。
モジュールをインポートすると、を含むすべてのモジュールレベルのステートメントが実行されますobj=test()
。これを回避するには、インポート時ではなく、メインプログラムとして実行する場合にのみインスタンスを作成します。
class test(object):
def __init__(self):
print 'INIT of test class'
if __name__ == '__main__':
obj=test()
問題は継承ではなくインポートです。あなたの場合obj=test()
、インポート時に実行します:
from test import test
インポートするとtest
、その名前__name__
はtest
。になります。ただし、コマンドラインでメインプログラムとしてプログラムを実行するとpython test.py
、その名前は__main__
。になります。したがって、インポートの場合、次obj=test()
を使用するとスキップします。
if __name__ == '__main__':
obj=test()
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加