불변 클래스와 가변 클래스를 사용하여 Python에서 순환 가져오기를 처리하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-11-06 20:26:02
원래의
917명이 탐색했습니다.

How to Handle Circular Imports in Python with Immutable and Mutable Classes?

불변 클래스와 가변 클래스를 사용하여 Python에서 순환 가져오기 방지

순환 가져오기는 일반적으로 잘못된 코드 설계의 증상으로 간주됩니다. 그러나 특정 시나리오에서는 클래스 간의 순환 종속성이 필요할 수 있습니다. 이러한 경우 가져오기 오류를 방지하려면 가져오기 문과 순환 참조 배치를 주의 깊게 관리해야 합니다.

예시 시나리오

두 클래스 A와 B를 생각해 보세요. 여기서 A에는 변경 가능한 속성(목록)이 있고 B에는 변경 불가능한 속성(튜플)이 있습니다. 각 클래스에는 다른 클래스의 인스턴스를 가져와 자신의 인스턴스를 반환하고 이에 따라 특성을 변환하는 메서드가 필요합니다.

솔루션

피하는 방법에는 여러 가지가 있습니다. 이 시나리오에서는 순환 가져오기:

절대 가져오기:

a.py 및 b.py에서는 절대 가져오기를 사용하여 모듈이 서로 직접 가져올 수 있도록 합니다.

# a.py
from package import b

# b.py
from package import a
로그인 후 복사

가져오기 연기:

함수 내에서 실제로 필요할 때까지 다른 클래스 가져오기 지연:

# a.py
def convert_to_list(b_obj):
    from package import b
    return a.A(list(b_obj.immutable_attr))

# b.py
def convert_to_tuple(a_obj):
    from package import a
    return b.B(tuple(a_obj.mutable_attr))
로그인 후 복사

중급 모듈:

a와 b를 모두 가져오는 중간 모듈을 만듭니다. 그런 다음 순환 가져오기를 피하기 위해 이 모듈을 a와 b 모두에서 가져올 수 있습니다.

# package/common.py
import a
import b
로그인 후 복사

a.py 및 b.py에서 중간 모듈을 가져옵니다.

# a.py
from package import common

# b.py
from package import common
로그인 후 복사

클래스 정의에서 순환 참조 방지:

클래스 정의에서 순환 참조를 피해야 합니다. 대신, 클래스의 속성을 인수로 사용하고 적절한 클래스의 인스턴스를 반환하는 팩토리 함수를 만드는 것을 고려해 보세요.

# a.py
def create_a(list_attr):
    return A(list(list_attr))

# b.py
def create_b(tuple_attr):
    return B(tuple(tuple_attr))
로그인 후 복사

위 내용은 불변 클래스와 가변 클래스를 사용하여 Python에서 순환 가져오기를 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!