내가 다른 답변에서 몇 가지 아이디어를 가져다 파이썬 데코레이터로 설정되어 @modulize
함수를 모듈로 변환합니다. 이 모듈은 평소대로 가져올 수 있습니다. 다음은 그 예입니다.
import sys
from types import ModuleType
class MockModule(ModuleType):
def __init__(self, module_name, module_doc=None):
ModuleType.__init__(self, module_name, module_doc)
if '.' in module_name:
package, module = module_name.rsplit('.', 1)
get_mock_module(package).__path__ = []
setattr(get_mock_module(package), module, self)
def _initialize_(self, module_code):
self.__dict__.update(module_code(self.__name__))
self.__doc__ = module_code.__doc__
def get_mock_module(module_name):
if module_name not in sys.modules:
sys.modules[module_name] = MockModule(module_name)
return sys.modules[module_name]
def modulize(module_name, dependencies=[]):
for d in dependencies: get_mock_module(d)
return get_mock_module(module_name)._initialize_
프로젝트
가
here on GitHub를 찾을 수 있습니다 다음과 같이
@modulize('my_module')
def my_dummy_function(__name__): # the function takes one parameter __name__
# put module code here
def my_function(s):
print(s, 'bar')
# the function must return locals()
return locals()
# import the module as usual
from my_module import my_function
my_function('foo') # foo bar
데코레이터에 대한 코드입니다. 특히, 참가자가 하나의 .py
파일 만 제출하도록 허용하는 프로그래밍 콘테스트 용으로 제작했습니다. 이를 통해 여러 .py 파일로 프로젝트를 개발 한 다음 끝에 하나의 .py
파일로 결합 할 수 있습니다.
찾고 계신 단어는 ___ 모크 ___입니다. 이 질문은 도움이 될 수도 있습니다. http://stackoverflow.com/questions/295438 –