Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python 클래스 간의 순환 종속성을 어떻게 처리합니까?


파이썬 클래스 간의 순환 종속성을 보여주는 다음 코드가 있습니다.

class P():
     q = Q().do_something();
     def do_something(self):
         pass
 class Q():
     p = P().do_something();
     def do_something(self):
         pass

클래스의 경우 함수와 달리 정의 시점에 클래스의 본문이 실행됩니다. 클래스 P를 정의하려면 실제로 Q 메서드를 호출해야 합니다. 클래스 Q가 아직 정의되지 않았기 때문에 수행할 수 없습니다.

이 문제를 해결하기 위해 클래스를 정의한 다음 나중에 속성을 추가할 수 있습니다. −

class P(object):
   pass
class Q(object):
   pass
P.q = Q.do_something()
Q.p = P.do_something()

각 do_something 호출이 이미 실행된 다른 호출에 의존하는 경우 작동하지 않습니다. 문제를 해결하려면 아직 더 많은 변경 작업을 수행해야 합니다.

클래스에는 이러한 문제가 있습니다. 왜냐하면 클래스 수준의 지시문(q =Q.do_something())은 클래스의 인스턴스를 생성할 때가 아니라 클래스를 정의하는 동안 실행되기 때문입니다.

두 클래스가 모두 정의된 후 나중에 클래스 정의를 완료할 수 있습니다. 이것은 Python이 동적 언어라는 점을 증명합니다.