Estou tentando organizar alguns módulos para meu próprio uso. Eu tenho algo assim:
lib/
__init__.py
settings.py
foo/
__init__.py
someobject.py
bar/
__init__.py
somethingelse.py
Em lib/__init__.py
, desejo definir algumas classes a serem usadas se eu importar lib. No entanto, não consigo descobrir isso sem separar as classes em arquivos e importá-los __init__.py
.
Em vez de dizer:
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
Eu quero algo assim:
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
É possível ou tenho que separar a classe em outro arquivo?
EDITAR
OK, se eu importar lib de outro script, posso acessar a classe Helper. Como posso acessar a classe Helper em settings.py?
O exemplo aqui descreve referências dentro do pacote. Cito "os submódulos geralmente precisam se referir uns aos outros". No meu caso, o lib.settings.py precisa do Helper e lib.foo.someobject precisa de acesso ao Helper, então onde devo definir a classe Helper?
Respostas:
o
lib/
diretório pai de deve estar emsys.path
.Seu '
lib/__init__.py
' pode ser assim:Então, o seguinte exemplo deve funcionar:
Resposta à versão editada da pergunta:
__init__.py
define a aparência de seu pacote de fora. Se precisar usarHelper
emsettings.py
, definaHelper
em um arquivo diferente, por exemplo, 'lib/helper.py
'.O comando:
Resultado:
fonte
Se
lib/__init__.py
define a classe Helper, em settings.py você pode usar:Isso funciona porque. é o diretório atual e atua como um sinônimo para o pacote lib do ponto de vista do módulo de configurações. Observe que não é necessário exportar o Helper via
__all__
.(Confirmado com python 2.7.10, em execução no Windows.)
fonte
Você acabou de colocá-los em __init__.py.
Portanto, com test / classes.py sendo:
... e test / __ init__.py sendo:
Você pode importar teste e ter acesso a A, B e Helper
fonte
Adicione algo assim a
lib/__init__.py
from .helperclass import Helper
agora você pode importá-lo diretamente:
from lib import Helper
fonte
Edite, uma vez que não entendi bem a questão:
Basta colocar a
Helper
classe__init__.py
. Isso é perfeitamente pitônico. Parece estranho vindo de linguagens como Java.fonte
Sim, é possível. Você também pode querer definir
__all__
em__init__.py
arquivos. É uma lista de módulos que serão importados quando você fizerfonte
Talvez isso pudesse funcionar:
fonte