2017-10-09 6 views
0

우리는 하나의 파일에 모든 것을 통합 한 것처럼 조직적인 목적으로 별도의 파일/모듈에 보관하려는 여러 모듈을 가지고 있습니다. 항해하기가 어렵다. 그러나 우리는 모든 관련 함수를 호출하여 스크립트에서 쉽게 사용할 수 있도록 단일 모듈로 가져올 수 있기를 원합니다.다른 여러 모듈로 하나의 파이썬 모듈 만들기

우리가 성취하고자하는 일의 예입니다.

# module1.py 
class Module1(): 
    def __init__(self, file): 
     self.file = load.file 

    def get_item_from_file(): 
     return self.file['path']['to']['item'] 

우리는 우리가 사용할 수 있도록하려면 즉

# all_modules.py 
from module1 import Module1 
from moduleN import ModuleN 

class AllModules(): 
     def __init__(self,file): 
      self.file = load.file 
      # Some magic to instantiate all the functions in Module1-N 
      # so they can be instantiated by making an AllModules object 

을 가지고 하나의 파일을 가지고 싶다 :

우리는 구조에있는 파일의 n 개의 번호가 위의 모듈은 다음과 같습니다.

#Somescript.py 
from all_modules import AllModules 
file = some_file_input 
test = AllModules(file) 
item_in_file = test.get_item_from_file() 

우리는이 유형에 대해 상당히 익숙합니다. F 모듈 작동. 우리는 무언가를 함께 해킹하는 것보다 파이썬 적 방법을 사용하고 있는지 확인하고자합니다.

+0

자바에서 온 것처럼 보입니다. 클래스와 모듈은 완전히 다른 것입니다. 차이점을 이해하는 것이 중요합니다. – user2357112

+0

나는 자바에서 오지 않을 것이지만 내 용어는 꺼져있을 수있다. 우리는 이론적으로 module1.py 파일마다 여러 클래스를 가질 수 있습니다. 나는 예제를 단순하게 유지하려고 노력했다. 문제가 우리의 구조를 변경함으로써 해결된다면 나는 흥미가있을 것입니다. – user1691282

+1

왜 모든 것이 수업에 있습니까? 왜 다른 클래스의 여러 함수를 결합하기 위해 클래스를 만들려고합니까? 어떤 클래스도 전혀 정의해서는 안되는 무언가를 위해 무서운 다중 상속 괴물과 함께 감을거야. 모듈 수준의 기능을 작성해야합니다. – user2357112

답변

0

"moduleX import ModuleX"문에서 처리하지 않는 한 상관없이 문자열 기반 가져 오기를 수행 할 수 있습니다.

import importlib 

def my_import(name): 
    components = name.split('.') 
    mod = __import__(components[0]) 
    for comp in components[1:]: 
     mod = getattr(mod, comp) 
    return mod 

imports = [] 
for root, dirs, files in os.walk(rootdir): 
    for f in files: 
     if f.startswith("module"): 
      # find module number magic. 
      imports.apppend(my_import(f.replace('.py', '') + ".module" + str(modulenumber)) 

그런 다음,이 코드는 정확히 완전히 테스트되지

class_instance = imports[i]() 

에 의해 모듈을 참조하지만, 동적 파일의 문자열로 특정 클래스를 가져 오기의 문서화 방법.