2016-12-11 1 views
0

다음을 작성할 수 있도록 패키지를 어떻게 구현해야합니까?모듈/패키지에서 객체를 노출하는 방법은 무엇입니까?

내 모듈을 마켓이라고합니다. 바나나와 애플이

import market as mk 

B = mk.Banana(0.99) 
A = mk.Apple(1.10) 
A.buy() 
B.buy() 

있습니다 : 그것은 내가 다음 코드 조각을 쓸 수 있도록하려면 내 goShopping.py에서 goShopping.py

라는 내 파이썬 스크립트의 작업 디렉토리에 폴더입니다 내 모듈의 일부 파일에있는 개체.

모듈 시장은 어떻게 작성되어야합니까?

modules.py에 fruits.py라는 파일이 있다고 가정 해 봅시다. 여기에 Banana 및 Apple 클래스를 정의합니다. 나는 다음과 같이 내가 위의 코드를 작성할 수 있습니다 알고

import market.fruits as mk 

B = mk.Banana(0.99) 
A = mk.Apple(1.10) 
A.buy() 
B.buy() 

그러나 나는 그것을 원하지 않는다. 나는이 같은 __init__.py에서 어떤 선언 (시장 폴더 안에 __init.py) 문제에 대해 생각 솔루션으로

: 행에서

AttributeError: module 'market' has no attribute 'Banana' 

:

from fruits import Apple,Banana. 

는하지만 다음과 같은 오류가 발생합니다 :

B = mk.Banana(0.99) 

어떻게 구성해야합니까? 내가 원하는대로 물건을 드러내 기 위해 쓰는가?

iOS 용 Pythonista를 사용하고 있습니다. 이것이 문제인지 궁금합니다.

+0

당신이해야 할 일. 어떻게 과일을 가져 와서 Apple, Banana가 실패 했는가 - 오류 메시지는 무엇인가? 일반적으로 파이썬의 모든 이름은 모듈과 패키지 이름을 포함하여 대소 문자를 구분합니다. PEP-8은 소문자로 모두 해당하는 파일/폴더 이름을 사용해야 함을 의미합니다. – martineau

+0

@martineau 질문을 제 오류 메시지와 함께 업데이트했습니다. 내 클래스 이름 만 대문자 – zeh

+0

'B = mk.Banana (0.99)'줄에는 오류가 있지만'from fruit imported Apple, Banana'는'__init __. py'에 오류가 없다는 것이 이상하게 보입니다.'import' 행 바로 뒤에'print (Banana)'를 추가하고 그 결과로 오류가 발생하는지 확인하십시오. – martineau

답변

0

모듈/스크립트를 가져 오지 않았을 가능성이 큽니다. 오류 메시지는 발생하지 않습니다. 'xyz'라는 모듈을 가져 오십시오. 액세스하지 않으려는 경우 오류가 표시되지 않습니다.

가장 큰 이유는 모듈이 스크립트와 동일한 폴더에 있지 않거나 __init__.py 스크립트가 포함 된 하위 디렉토리에 없기 때문일 수 있습니다.

스크립트는 자체와 동일한 폴더에있는 모듈을 가져올 수 있어야합니다. 패키지에서 모듈을 가져올 수도 있습니다. 패키지는 하나 이상의 파이썬 모듈을 포함하는 폴더와 폴더를 패키지로 표시하는 __init__.py라는 특수 모듈입니다. 패키지 폴더는 PYTHONPATH에 있어야하거나 파이썬이 찾을 수 있도록 현재 작업 디렉토리의 서브 디렉토리 여야합니다. 그러나 서브 패키지 폴더는 찾을 수 없습니다.

이 방법의 좋은 설명을 제공하는 this article을 확인하십시오.

관련 문제