Python 프로그래밍 영역에서는 모듈이 서로 가져오려고 할 때 순환 종속성이 발생할 수 있습니다. 잠재적인 위험을 피하려면 이러한 가져오기의 동작을 이해하는 것이 중요합니다.
foo와 bar라는 두 모듈이 import foo와 import bar를 사용하여 서로를 상호 가져오는 경우 두 모듈이 완전히 로드되므로 가져오기가 원활하게 성공합니다. 서로 참조할 수 있습니다.
그러나 from foo import abc 및 from bar import xyz와 같은 import를 사용할 때 문제가 발생합니다. 이러한 시나리오에서 각 모듈을 진행하려면 먼저 다른 모듈을 가져와야 합니다. 이러한 순환적 종속성은 가져오기 오류로 이어집니다.
설명하기 위해 다음 코드를 고려하십시오.
# foo.py from bar import xyz def abc(): print(xyz.__name__) # bar.py from foo import abc def xyz(): print(abc.__name__)
foo에서 bar를 실행하기 전에 bar를 가져와야 하기 때문에 이 코드는 ImportError를 발생시킵니다. import 문에서 실행하지만 bar에서는 foo를 먼저 가져와야 합니다.
순환 가져오기를 효과적으로 처리하려면 몇 가지 솔루션이 필요합니다. 존재:
모듈 상단; 아니 에서; Python 2만 해당:
# foo.py import bar def abc(): print(bar.xyz.__name__) # bar.py import foo def xyz(): print(foo.abc.__name__)
모듈 상단, 알았어; 상대적인 괜찮아; Python 3만 해당:
# foo.py from . import bar def abc(): print(bar.xyz.__name__) # bar.py from . import foo def xyz(): print(abc.__name__)
모듈 상단, 아니 에서; 친척 없음:
# foo.py import lib.bar def abc(): print(lib.bar.xyz.__name__) # bar.py import lib.foo def xyz(): print(lib.foo.abc.__name__)
모듈 하단; 모듈이 아닌 가져오기 속성; ok에서:
# foo.py def abc(): print(xyz.__name__) from .bar import xyz # bar.py def xyz(): print(abc.__name__) from .foo import abc
최고의 기능; from ok:
# foo.py def abc(): from . import bar print(bar.xyz.__name__) # bar.py def xyz(): from . import foo print(foo.abc.__name__)
그러나 Star 수입은 원본 기사에 제공된 예에서 논의되지 않았습니다.
위 내용은 Python에서 순환 가져오기를 어떻게 방지하고 해결할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!