2016-09-18 2 views
0

나는 프로그램을 세 개의 스크립트로 분할했다. 그 중 하나 인 'classes.py'는 필요한 모든 클래스를 정의하는 모듈입니다. 또 다른 셋업 모듈은 'setup.py'라고 부르며 'classes.py'에서 많은 객체를 인스턴스화합니다 (루프, 함수 또는 클래스가없는 변수 할당을 많이 포함). 그것은 문자열 자체가 많아서 프로그램 자체 인 세 번째 스크립트에서 작업하고 싶지 않습니다. 즉 실제로 위의 모든 작업을 수행하는 스크립트입니다.중첩 모듈을 사용하는 적절한 방법

내가 일이있어 유일한 방법은 'setup.py'스크립트에 추가 :이 날 모든 곳에서 추가 된 네임 스페이스를하지 않고 설치 파일을 빠르게 작성할 수 있습니다

from classes import * 

. 그리고, 주 스크립트에서 :

import setup 

이것은 클래스와 메소드에 대한 완전한 코드 완성을 제공하는 PyCharm의 장점이 있습니다.

기본 스크립트에서 클래스를 가져온 다음 두 가지 간단한 명령으로 필요한 개체를 만들기 위해 설치 스크립트를 실행하면됩니다. 그러나 클래스 스크립트를 기본 스크립트로 가져올 수는 없으므로 설치 스크립트는 클래스 정의가 없으므로 아무 것도 할 수 없습니다. 클래스를 두 스크립트 모두로 가져와야합니까, 아니면 완전히 다른 것을해야합니까?

+0

죄송합니다. 메인 스크립트에'classes' 모듈을 가져 오는 것이 설치 프로그램이 아무 것도 할 수 없다는 것을 의미합니까? –

+0

예, 모든 파일을 각각의 파일로 가져와야합니다. –

답변

0

각 파일에서 가져 오기. this SO post을 고려하십시오. Mr Fooz의 답변에서

각 모듈에는 고유 한 네임 스페이스가 있습니다. 그래서 boo.py가 외부 모듈로부터 무엇인가를 보게하려면, boo.py는 그것을 외부로 가져와야합니다.

예상되는 방식으로 네임 스페이스가 쌓이는 언어를 작성할 수 있습니다.이를 동적 범위 지정이라고합니다. 원래의 lisp, 초기 버전의 perl, postscript 등과 같은 일부 언어는 동적 범위 지정을 사용 (또는 지원)합니다.

대부분의 언어는 어휘 범위를 대신 사용합니다. 이것은 언어가 작동하는 훨씬 좋은 방법입니다. 모듈이 호출 된 방식에 대해 걱정할 필요없이 자체 코드를 기반으로 작동하는 방식에 대해 이유를 판단 할 수 있습니다.

자세한 내용은이 문서를 참조하십시오 : 직관적이 너무 좋네요 느낌 http://en.wikipedia.org/wiki/Scope_%28programming%29

을 같이 할 수있는 즉시 코드가 종속되는 참조 (파일 자체에서) - 이것은 당신이 많은 코드를 이해하실 수 있습니다 더 나은, 한 달, 심지어는 1 년 후에

+0

답과 SO 게시에 감사드립니다. 이제 논리적 인 것 같습니다. 1 년 후부터 스크립트 C를 읽고, B를 가져 왔고, B를 읽고 A가 수입되는 것을 확인했습니다. 저는 이것이 좋은 습관을 가지고 있는지 확신 할 수 없었습니다. :) 고마워요. – Cirrocumulus

관련 문제