불변 클래스와 가변 클래스를 사용하여 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!