2017-04-12 3 views
0

importlib & getattr을 사용하여 클래스의 인스턴스를 동적으로 만듭니다. 그러나 아래에 제공된 Proxy.py을 실행하면 생성자가 두 번 호출되고 중복 결과가 발생합니다. 미리 감사드립니다. (파이썬 3.6.1)클래스를 동적으로 인스턴스화 할 때 생성자가 두 번 호출됩니다.

결과

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)으로, 한 번만 Proxy (가져온 경우 Crunner)으로 두 번 가져 왔습니다.

해결책은 간단하다 :

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

덕분에 빠른 해결책과 해명 다시 @bruno desthuilliers : Proxy이 스크립트로 사용하는 경우 그래서에만 실행되는 것 Crunner()에 대한 호출을 보호. –

관련 문제