문제

다음과 같이 구성된 프로젝트가 있습니다.

project/
    __init__.py
    builder.py
    component/
        __init__.py

이내에 builder.py, Borg 패턴을 구현하기 위해 여러 클래스 속성이 있는 Builder라는 클래스가 있습니다.Builder를 가져오려고 할 때 문제가 발생합니다. component/__init__.py 클래스 속성을 변경합니다.함수가 반환되면 패키지의 클래스 속성에 대한 모든 변경 사항이 취소되는 것 같습니다.

업데이트:다음은 무슨 일이 일어나고 있는지에 대한 간단한 예입니다.

builder.py

class Builder(object):
    attribute = True

import component

print Builder.attribute

구성요소/___init___.py

from project.builder import Builder

Builder.attribute = False

산출:

False
True

두 줄이 인쇄된다는 사실로 판단하면 다음의 코드가 builder.py 두 번 실행되어 값이 재설정됩니다. attribute 사실로.

도움이 되었습니까?

해결책

당신이 가지고 있는 것은 순환 가져오기입니다.빌더는 컴포넌트를 가져오고, 컴포넌트는 빌더를 가져옵니다.

빌더가 구성 요소를 가져올 때 빌더가 아직 완전히 구성되지 않았습니다.그런 다음 구성 요소는 나머지 빌더 모듈을 실행하는 빌더를 가져옵니다(모두 이후 import component).나중에 구성요소가 로드되면 빌더는 이후의 모든 작업을 다시 계속합니다. import component.

구성 요소가 먼저 로드되면 동작이 달라집니다.

기본적으로 순환 가져오기를 수행하면 안 됩니다.다른 방법으로 코드를 구성해 보세요.

다른 팁

코드를 단순화된 버전으로 실제로 표시해야 합니다.다음과 같은 것(예를 들어저것 project sys.path에 있음):

import builder
builder.Builder.baah = 'boo!'

~에 component/__init__.py, 예를 들어, "실행 취소"나 "재설정" 없이도 잘 작동해야 합니다.

그런데 정확히 어떤 코드인지 ~이다 대신에 "무엇이든 변경"을 수행하기 위해 사용하고 계시나요...?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top