print()
함수를 "오버라이드"하여 "world"
을 대신 반환한다고 가정 해 봅시다. 프로그래밍 방식으로이 작업을 수행하려면 어떻게해야합니까 (수동으로 my_module.py
을 수정하지 않고)? 내가 생각 무엇
내가 전이나 그것을 가져 오는 동안
my_module
의 소스 코드를 수정 어떻게 든해야한다는 것입니다. Obvisouly, 수입 후 이것을 할 수 없으므로
unittest.mock
을 사용하는 솔루션은 불가능합니다.
또한 my_module.py
파일을 읽고 수정 한 다음로드 할 수 있다고 생각했습니다. 하지만 모듈이 다른 곳에 있으면 작동하지 않기 때문에 이것은 추한 것입니다.
좋은 해결책은 내 생각에 importlib
을 사용하는 것입니다.
나는 문서를 읽고 아주 교차하는 방법을 발견했다 : get_source(fullname)
. 난 그냥 그것을 무시할 수 있다고 생각 :
def get_source(fullname):
source = super().get_source(fullname)
source = source.replace("hello", "world")
return source
불행하게도, 나는 조금 모든 추상 클래스와 함께 손실 내가 제대로이를 수행하는 방법을 모르는입니다.
내가 헛되이 시도 :spec = importlib.util.find_spec("my_module")
spec.loader.get_source = mocked_get_source
module = importlib.util.module_from_spec(spec)
어떤 도움이 환영하십시오 것입니다.
는'my_module'이 ('인쇄를 정의하지 않습니다)'파이썬 3에 내장 된 기능은 다음과 같습니다 파이썬 2와 호환성이 필요한 경우
, 나는 소스 파일을 읽는 것보다 다른 방법을 볼 수 없습니다 .엑스. – martineau@martineau 귀하의 요점을 이해하지 못합니다. 파이썬 3을 사용하기 때문에'print()'를 정의하지 않아도 문제없이 사용할 수 있습니다. – Delgan
당신은 당신이'print()'함수를 오버라이드하고 싶다고 말했고, 나는 당신이 가져올 모듈에 정의되어 있지 않다는 것을 지적했다. – martineau