2010-07-17 2 views
2

동일한 파일에서 서로를 참조하는 두 개의 클래스를 갖기 위해 노력합니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?파이썬 순환 참조

class Foo(object): 
    other = Bar 

class Bar(object): 
    other = Foo 

if __name__ == '__main__': 
    print 'all ok' 

?

문제는 클래스 자체가 구문 분석되는 즉시 실행하려고하기 때문에 속성이 클래스에 있기 때문에 문제가되는 것 같습니다.

해결 방법이 있습니까?

편집 : 그들은 정말 클래스 변수 (없는 경우)입니다에

그 키, SQLAlchemy의 매핑에 사용됩니다.

답변

11

이 당신이 원하는 것을 할 것 :

class Foo(object): 
    pass 

class Bar(object): 
    pass 

Foo.other = Bar 
Bar.other = Foo 

그래도 완전히 같은 디자인을 회피하는 것을 선호합니다.

+0

나를 초 몇 초 만에 ... :-) –

+0

이것은 모델 사이의 관계를 생성하기 위해 sqlalchemy와 함께 사용되며, 의사는 이러한 디자인 (정확한 플라스크 용 문서)을 가리키는 것처럼 보입니다. 기묘한. – sharvey

+1

AFAIK sqlalchemy는 외래 키에 문자열 참조를 사용하므로이 문제를 피할 수 있습니다. 그러나이 작업을 수행해야하는 경우가있을 수 있습니다. – zvone

1

당신이 정말로 클래스 속성이 아닌 인스턴스 속성으로 Foo.otherBar.other을한다고 가정하면, 다음이 (난 그냥 확실하게 테스트) 작동 :

class Foo(object): 
    pass 

class Bar(object): 
    pass 

Foo.other = Bar 
Bar.other = Foo 

당신이있어 인스턴스 속성의 경우 그 후에 aaronasterling의 대답이 더 적절합니다.

+1

질문을 업데이트하겠습니다. 그것이 막연하다면 미안 해요. – sharvey