2017-04-12 13 views
0

importlib & getattrを使用して、クラスのインスタンスを動的に作成しています。しかし、私がProxy.pyを実行すると、コンストラクタが2回呼び出され、重複した結果が得られます。前もって感謝します。 (Pythonの3.6.1)クラスを動的にインスタンス化するときにコンストラクターが2回呼び出される

結果

inside Cproxy contructor 
inside Cproxy read() 
inside Cproxy contructor 
inside Cproxy read() 

Runner.py

import importlib 
class Crunner: 
    def __init__(self, nameofmodule, nameofclass):   
     self.run(nameofmodule, nameofclass) 

    def run(self, nameofmodule, nameofclass): 
     module = importlib.import_module(nameofmodule)    
     class_ = getattr(module, nameofclass) 
     instance = class_() 
     instance.read() 

Proxy.py

from Runner import Crunner 
class Cproxy: 
    def __init__(self): 
     print("inside Cproxy contructor")  
    def read(): 
     print("inside Cproxy read()") 


Crunner("Proxy", "Cproxy") 

答えて

1

あなたのプロキシモジュール__main__python Proxy.pyを実行した場合)と(インポートした場合)のうちの1回、2回インポートされます。

解決策は単純です:

if __name__ == "__main__": 
    Crunner("Proxy", "Cproxy") 
+0

おかげで迅速な解決や明確化のために再び@bruno desthuilliers:Proxyがスクリプトとして使用されているときに、それが唯一の実行だCrunner()への呼び出しを守ります。 –

関連する問題