2012-10-23 3 views
1

저는 파이썬에 초보자입니다.파이썬 순환 가져 오기 및 액세스 클래스

내가 가진

pin.py :

from board import Board 
class pin(object): 
    board_id = Int() 
    my_board = store.get(Board, board_id) 

    def __init__(self, val): 
    ... 

board.py : 당신은 내가 다른에서 핀과 보드 모두에 액세스 할 수 있어야 볼 수 있듯이

from pin import Pin 
class Board(object): 
    id = Int() 
    def __init__(self, val): 
    ... 

Board.pins = ReferenceSet(Board.id, Pin.board_id) 

수업. 나는 here을보고 import pinimport board만을 수행했습니다. 내가 그렇게하고 내 pin.py, 예를 들어 board.Board 또는 pin.Pin을 할 때 나는 그것이 나에게이 오류

AttributeError: 'module' object has no attribute 'Board'

나는 위의 코드가있을 때이 발생하지 않은를 제공 my_board = store.get(board.Board, board_id)해야합니다 하지만 순환 가져 오기가 없습니다. 나는 원형의 수입을 어떻게

수입되는 파일에서 클래스를 호출

내 질문을 명확히하기 위해?

+0

무엇이 당신의 질문입니까? – BrenBarn

+0

내 질문에 어떻게 순환 가져 오기 및 현재 파일에서 다른 클래스에 대한 호출을 할 그래서 그 보드가 가져올 수있는 파일이 주어진 주어진 store.get (board.Board, board_id) 나를 위해 작동하지 않습니다 및 게시판은 그 파일에있는 클래스입니다. – Matilda

답변

2

귀하의 질문에 대한 진정한 대답은 "순환 수입을 사용하지 마십시오"입니다. 두 모듈이 필요로하는 것을 가져 와서 세 번째 모듈에 넣거나 두 모듈을 하나로 결합하십시오.

귀하의 사례에서 어떤 일이 벌어지고있는 지보다 링크 된 예보다 구체적으로 말하자면 순환 가져 오기 - 각 다른 모듈의 최상위 모듈 코드에서 순환 가져 오기 참조를 안전하게 사용할 수 없습니다. 연결된 다른 질문이 이미 설명되어 있으므로 함수 내부의 모듈 내용에만 액세스하여 순환 참조를 "보호"해야합니다. 각각의 모듈을 다른 모듈에서 직접 사용하려고하면 모듈이 실행되기 전에 어느 모듈도 실행을 마칠 수 없으므로 절대로 작동하지 않습니다. 따라서 어느 모듈도 실행을 마칩니다.

+0

그래서 보통 그렇게하지 않는 것이 좋지만,이 경우에는 일대 다 관계를 수행하므로 두 클래스 (모델)가 서로 액세스 할 수 있어야합니다. , 그것은 일반적인 방법을 거기에 넣기위한 또 다른 모듈을 만드는 것이 합리적이지 않습니다 ... 어떤 제안입니까? – Matilda

+1

@Meena : 왜 두 클래스가 분리 된 모듈에 처음으로 있습니까? – BrenBarn

+0

흠, 루비 배경에서 파이썬이 어떻게하는지 모르겠습니다. 하지만 ORM activeRecord 방식으로 생각하면됩니다. 핀 모델 (db 테이블) 및 보드 모델 (db 테이블) 그래서 그들은 테이블에 해당하는 별도의 클래스를 가질 필요가 있습니다. 그래서 나는 그것들을 개별 파일에 넣었습니다 ... 모듈은 클래스 또는 파일을 참조합니까? 두 파일을 같은 파일에 넣어 두는 건가요? 그러나 일대 다 및 다 대다 관계의 모든 것이 있다면 우리는 클래스로 가득 찬 커다란 파일로 끝납니다. 그것이 파이썬에서 어떻게 이루어 졌는가? – Matilda