파이썬 클래스 간의 순환 종속성을 보여주는 다음 코드가 있습니다.
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이 동적 언어라는 점을 증명합니다.