>  기사  >  백엔드 개발  >  클래스가 서로 의존하는 경우 순환 가져오기를 피하는 방법은 무엇입니까?

클래스가 서로 의존하는 경우 순환 가져오기를 피하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-06 00:35:02586검색

How to Avoid Circular Imports When Classes Depend on Each Other?

Python에서 순환 가져오기 방지

Python에서 순환 가져오기는 둘 이상의 클래스나 모듈이 서로 의존할 때 발생할 수 있으며, 종종 오류를 가져옵니다. 두 클래스가 서로의 인스턴스를 생성자 인수로 사용하도록 하려는 특정 사례에서 이 문제를 방지하려면 다음 접근 방식을 고려하세요.

1. 공유 참조 모듈:

두 클래스를 모두 가져오고 각각에 대한 참조를 제공하는 별도의 모듈(예: reference.py)을 만듭니다.

# reference.py
from class_a import ClassA
from class_b import ClassB

그런 다음 클래스 정의에서 다음을 수행합니다. 참조 모듈을 가져와서 이를 사용하여 다른 클래스의 인스턴스에 액세스합니다:

# class_a.py
from reference import ClassB

class ClassA:
    def __init__(self, class_b_instance):
        self.class_b_instance = class_b_instance

2. 추상 기본 클래스(ABC):

클래스 간의 공통 인터페이스에 대한 추상 기본 클래스를 정의하고 두 클래스 모두 이 인터페이스를 구현하도록 합니다.

# abc.py
from abc import ABC, abstractmethod

class Base(ABC):
    @abstractmethod
    def get_instance(self):
        pass
# class_a.py
from abc import ABC
from reference import ClassB

class ClassA(Base):
    def __init__(self, class_b_instance):
        self.class_b_instance = class_b_instance

    def get_instance(self):
        return self.class_b_instance

3. 어댑터 패턴:

한 클래스의 인스턴스를 다른 클래스의 인터페이스로 변환하는 어댑터 클래스를 만듭니다.

# adapter.py
class Adapter:
    def __init__(self, instance):
        self.instance = instance

    def get_instance(self):
        return self.instance

그런 다음 클래스 정의에서 어댑터를 사용하여 다음을 수행합니다. 다른 클래스의 인스턴스 래핑:

# class_a.py
from adapter import Adapter
from reference import ClassB

class ClassA:
    def __init__(self, class_b_instance):
        self.class_b_instance = Adapter(class_b_instance)

위 내용은 클래스가 서로 의존하는 경우 순환 가져오기를 피하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.