__init_.py에 정의된 클래스를 가져오는 방법
나는 나만의 사용을 위해 몇 가지 모듈을 구성하려고 합니다.나는 다음과 같은 것이 있습니다.
lib/
__init__.py
settings.py
foo/
__init__.py
someobject.py
bar/
__init__.py
somethingelse.py
인lib/__init__.py
lib를 가져올 때 사용할 클래스를 정의하고 싶습니다.하지만 클래스를 파일로 분리하여 가져오지 않고는 파악할 수 없는 것 같습니다.__init__.py
.
이렇게 말하는 것보다:
lib/
__init__.py
settings.py
helperclass.py
foo/
__init__.py
someobject.py
bar/
__init__.py
somethingelse.py
from lib.settings import Values
from lib.helperclass import Helper
저는 다음과 같은 것을 원합니다.
lib/
__init__.py #Helper defined in this file
settings.py
foo/
__init__.py
someobject.py
bar/
__init__.py
somethingelse.py
from lib.settings import Values
from lib import Helper
가능한가요, 아니면 수업을 다른 파일로 분리해야 하나요?
편집
다른 스크립트에서 lib를 가져오면 도우미 클래스에 액세스할 수 있습니다.settings.py 에서 도우미 클래스에 액세스하려면 어떻게 해야 합니까?
여기의 예에서는 패키지 내 참조에 대해 설명합니다.저는 "서브모듈들은 종종 서로를 참조할 필요가 있다"고 인용합니다.저 같은 경우에는 lib.settings.py 에는 Helper와 lib.foo가 필요합니다. 일부 개체는 Helper에 액세스해야 하는데 Helper 클래스를 어디서 정의해야 합니까?
'
lib/
의 상위 디렉터리는 다음 위치에 있어야 합니다.sys.path
.사용자의 '
lib/__init__.py
다음과 같이 보일 수 있습니다.from . import settings # or just 'import settings' on old Python versions class Helper(object): pass
그런 다음 다음 예제가 작동합니다.
from lib.settings import Values
from lib import Helper
질문의 편집된 버전에 대한 답변:
__init__.py
패키지가 외부에서 어떻게 보이는지 정의합니다.사용해야 하는 경우Helper
에settings.py
그런 다음 정의합니다.Helper
다른 파일에서, 예를 들어, 'lib/helper.py
'.
.'-- import_compodule.pylib__init_.py푸|-- __init_.py'-- someobject.py|-- helper.py`-- settings.py 디렉터리 2개, 파일 6개
명령:
$ python import_submodule.py
출력:
settings
helper
Helper in lib.settings
someobject
Helper in lib.foo.someobject
# ./import_submodule.py
import fnmatch, os
from lib.settings import Values
from lib import Helper
print
for root, dirs, files in os.walk('.'):
for f in fnmatch.filter(files, '*.py'):
print "# %s/%s" % (os.path.basename(root), f)
print open(os.path.join(root, f)).read()
print
# lib/helper.py
print 'helper'
class Helper(object):
def __init__(self, module_name):
print "Helper in", module_name
# lib/settings.py
print "settings"
import helper
class Values(object):
pass
helper.Helper(__name__)
# lib/__init__.py
#from __future__ import absolute_import
import settings, foo.someobject, helper
Helper = helper.Helper
# foo/someobject.py
print "someobject"
from .. import helper
helper.Helper(__name__)
# foo/__init__.py
import someobject
한다면lib/__init__.py
그러면 설정에서 도우미 클래스를 정의합니다.사용할 수 있는 파이:
from . import Helper
이는 .가 현재 디렉터리이고 설정 모듈의 관점에서 lib 패키지의 동의어로 작동하기 때문입니다.다음을 통해 도우미를 내보낼 필요는 없습니다.__all__
.
(Windows에서 실행되는 python 2.7.10으로 확인됨)
__init_.py에 넣으면 됩니다.
따라서 test/classes.py 은 다음과 같습니다.
class A(object): pass
class B(object): pass
및 test/_init_.py는 다음과 같습니다.
from classes import *
class Helper(object): pass
테스트를 가져와서 A, B 및 도우미에 액세스할 수 있습니다.
>>> import test
>>> test.A
<class 'test.classes.A'>
>>> test.B
<class 'test.classes.B'>
>>> test.Helper
<class 'test.Helper'>
다음에 이와 같은 것을 추가합니다.lib/__init__.py
from .helperclass import Helper
이제 직접 가져올 수 있습니다.
from lib import Helper
질문을 잘못 이해했기 때문에 편집:
그냥 놔둬요Helper
을 가르치다.__init__.py
그것은 완벽하게 부정적입니다.자바와 같은 언어에서 오는 것은 이상한 느낌입니다.
네, 가능합니다.정의할 수도 있습니다.__all__
에__init__.py
파일입니다. 파일을 가져올 때 가져올 모듈 목록입니다.
from lib import *
효과가 있을 수도 있습니다.
import __init__ as lib
언급URL : https://stackoverflow.com/questions/582723/how-to-import-classes-defined-in-init-py
'source' 카테고리의 다른 글
django: json 개체로 POST 기반 보기 테스트 (0) | 2023.08.02 |
---|---|
봄 3의 모든 컨트롤러 모델에 속성 추가 (0) | 2023.08.02 |
TAB에 데이터를 삽입하는 방법LE 유형 변수 (0) | 2023.08.02 |
Oracle ojdbc8 12.2.0.1 메이븐에서 금지됨 (0) | 2023.08.02 |
MySQL - CASE vs IF 문 vs IF 함수 (0) | 2023.08.02 |