2011-01-11 2 views
0

저는 Python 프로그래밍을 위해 Eclipse를 사용하고 있습니다.클래스 가져 오기 및 메소드 호출

내 프로젝트에는 main.py라는 파일이 있습니다. 이 파일은 프로젝트 파일 계층 구조의 루트에 있습니다. 루트 자체에서 클래스 이름이 Classes 인 폴더를 만들었습니다 : PositionWindow.py. 이 파일에는 PositionWindow 클래스가 포함되어 있으며 클래스 자체에는 Center()라는 함수가 있습니다.

main.py에서이 클래스 [PositionWindow]를 가져 와서 나중에이 함수 센터를 적절한 위치에 호출하려고합니다.

해당 클래스를 main.py에서 올바르게 가져올 수 없으며 나중에이 함수를 호출하는 방법을 따르지 않습니다.

답변

1

"프로젝트"의 루트에 "폴더"를 만드는 대신 "패키지"를 만드십시오. 단순히 __init__.py이라는 빈 파일을 만들고 main.py에서 모듈을 가져올 수 있어야합니다.

import Classes.PositionWindow 

p = Classes.PositionWindow.PositionWindow() 

p.Center() 

구조는 접근법에 결함이있을 수 있으므로 모듈 및 패키지를 읽어야합니다. 첫째, 클래스는 Java에서와 같이 별도의 .py 파일에있을 필요가 없습니다. 또한 패키지/모듈/함수/메소드는 모두 소문자 여야합니다. 클래스 이름 만 대문자 여야합니다.

+0

이 빈 파일 __init__.py의 역할은 무엇입니까? – RKh

+0

폴더가 파이썬 패키지임을 나타냅니다. 이 모든 것은 파이썬 튜토리얼에서 논의됩니다. – Falmarri

+0

시도 : 클래스에서 가져 오기 PositionWindow? 위에서 쓴 것과는 다른 점은 무엇입니까? – RKh

1

그래서이 파일의 레이아웃이 있습니다

:

  • /main.py (그 안에 센터)
  • /Classes/PositionWindow.py

을 당신은 두 가지 선택이

  • "클래스"를 Python 경로에 추가하면 PositionWindow.py를 직접 가져올 수 있습니다.
  • "클래스"를 패키지로 만듭니다 (더 나은 이름을 사용하는 것이 좋습니다).

클래스 폴더를 Python 경로에 추가하려면 PYTHONPATH를 환경 변수로 설정하여 포함 시키십시오. 이것은 쉘의 PATH처럼 작동합니다 - PositionWindow를 가져 오면 파이썬 경로의 모든 디렉토리를 검색하여 찾을 것입니다. 당신은 main.py 년과 같이 패키지 및 그 내용을 가져올 수 있습니다

Classes/__init__.py 

: 당신이 빈 파일을 추가하는 경우

는 다른 방법으로,

import Classes.PositionWindow 
x = Classes.PositionWindow.Center() 
+0

클래스의 인스턴스를 만들 필요가 없습니까? 나는 그것이 있어야한다고 생각한다. – RKh

+2

"x = Classes.PositionWindow.Center()"는 인스턴스를 만듭니다. –

5

당신은, 자바 프로그래밍 것 같다 아직도. 나는 당신이 오랫동안 자바를 사용했다는 것을 이해하지만 이것은 더 이상 자바가 아닙니다. 이것은 파이썬입니다 ...

  • 파이썬에는 디렉토리가 없습니다. 그것은있다 packages
  • 파이썬은 클래스 파일을 가지고 있지 않습니다. 그것은 modules입니다.
  • 모듈에는 여러 클래스가있을 수 있습니다.
  • 패키지에 여러 개의 모듈을 포함 할 수 있습니다.

난 당신이 적어도 python basic tutorial (특별히 part about packages and modules)을 읽는 것이 좋습니다 그래서 당신은 대신 언어를 추측하기 위해 노력하는, 파이썬을 배울 수 있습니다.

프로젝트의 구조에 관해서는 this article이 꽤 좋으며 어떻게하는지 보여줍니다.

뻔뻔한 복사 붙여 넣기 :

파이썬 프로젝트의

파일 시스템 구조

Jp Calderone

마십시오으로 :

  • 디렉토리와 프로젝트에 관련된 이름을 지정하십시오. 예를 들어 프로젝트의 이름이 "Twisted"인 경우 해당 소스의 최상위 디렉토리 이름을 파일 Twisted으로 지정합니다. 출시 할 때 버전 번호 접미사 : Twisted-2.5을 포함해야합니다.
  • Twisted/bin 디렉토리를 만들고 에 실행 파일이 있으면 여기에 입력하십시오. Python 소스 파일 인 경우에도 .py 확장명을 제공하지 마십시오. 가져 오기를 제외하고 에 코드를 삽입하지 말고 주 함수를 호출하여 프로젝트에서 다른 어딘가에 정의하십시오.
  • 프로젝트가 단일 파이썬 소스 파일로 표현 될 수 있다면 을 디렉토리에 넣고 프로젝트에 관련된 이름을 으로 지정하십시오. 예 : 의 경우 Twisted/twisted.py 여러 소스 파일이 필요 경우 (빈 Twisted/twisted/__init__.pyTwisted/twisted/, )를 대신 패키지를 만들고 그 안에 소스 파일을 배치합니다. 예 : Twisted/twisted/internet.py. (-이 위의 단일 파이썬 소스 파일 옵션이 속임수라고 의미 - 당신에게 항상 당신 단위 테스트에 대한 하나 이상의 다른 파일을 참고)
  • 는 패키지의 하위 패키지에 단위 테스트를했습니다. 예 : Twisted/twisted/test/. 물론 패키지에 Twisted/twisted/test/__init__.py으로 패키지하십시오. Twisted/twisted/test/test_internet.py과 같은 파일에 테스트를 배치하십시오.
  • Twisted/READMETwisted/setup.py을 추가하고 을 설치하면 좋을 것입니다.

하지 마십시오는 :

  • src 또는 lib라는 디렉토리에 소스를 넣어.이렇게하면 설치하지 않고도 실행하려면 을 어렵게 만듭니다.
  • 테스트를 Python 패키지 외부에 두십시오. 이로 인해 설치된 버전에 대해 테스트를 실행하기가 어려워집니다.
  • __init__.py 만있는 패키지를 만든 다음 모든 코드를 __init__.py에 넣으십시오. 그냥 패키지 대신에 모듈을 만드십시오, 더 간단합니다.
  • 는 사용자가 자신의 수입 경로에 을 포함하는 디렉토리를 추가하지 않고도 모듈 또는 패키지를 가져올 파이썬 수 있도록 마법의 해킹을 마련하려고 (중 PYTHONPATH 또는 다른 메커니즘을 통해). 은 모든 케이스를 올바르게 처리하지 않으며 사용자가 소프트웨어가 자신의 환경에서 작동하지 않을 때 이 화가납니다.
+0

고마워요. 그것을 읽으십시오. – RKh

+0

Thx,하지만 더 이상 작동하지 않는 링크를 변경하십시오. –

+0

@PhilippeGachoud가 보고서를 보내 주셔서 감사 드리며, 링크를 수정했습니다. – nosklo

관련 문제