Pra que serve o __init__.py em Python?

Cansado de programar?

Cansado(a) de quebrar a cabeça para aprender a programar Python de verdade?

Conheça a melhor e mais completa formação de Python e Django e sinta-se um programador verdadeiramente competente. Além de Python e Django, você também vai aprender Banco de Dados, SQL, HTML, CSS, Javascript, Bootstrap e muito mais!

Quero aprender Python e Django de Verdade! Quero aprender!
Suporte

Tire suas dúvidas diretamente com o professor

Suporte

Projetos práticos voltados para o mercado de trabalho

Suporte

Formação moderna com foco na prática profissional

Salve salve Pythonista!

Neste artigo, vamos abordar a importância e as funcionalidades do arquivo __init__.py em projetos Python.

Este arquivo é essencial para a organização de pacotes Python, garantindo uma estrutura modular e reutilizável.

Entender como usar o __init__.py é fundamental para qualquer desenvolvedor Python, pois melhora a manutenção e a escalabilidade do código.

Então vamos nessa!

Vá Direto ao Assunto…

O que é o __init__.py?

O arquivo __init__.py é uma maneira de indicar ao Python que o diretório no qual ele se encontra deve ser tratado como um pacote.

No Python, um pacote é uma forma de estruturar os módulos (arquivos .py) de uma forma hierárquica.

Sem o __init__.py, o Python não reconhecerá o diretório com um pacote, podendo causar erros na importação de módulos.

A presença desse arquivo permite que módulos e subpacotes sejam importados adequadamente.

Veja um exemplo:

1
2
3
4
5
6
7
# Estrutura de um projeto exemplo
meu_projeto/
    __init__.py
    modulo1.py
    subpacote/
        __init__.py
        modulo2.py

Formas de uso do __init__.py

Indicação de Pacotes

O uso mais simples do __init__.py é indicar ao Python que o diretório é um pacote.

Um __init__.py vazio já cumpre esse papel.

Por exemplo: supondo um diretório meu_projeto com estrutura mencionada acima, mesmo um __init__.py vazio permitirá importações:

Inicialização de Pacote

O __init__.py pode ser utilizado para realizar inicializações de pacotes. Isso é útil para configurar variáveis de ambiente, registros ou outras rotinas de inicialização:

1
2
3
4
5
6
# meu_projeto/__init__.py
print("Pacote 'meu_projeto' inicializado.")
CONFIG = {
    'versao': '1.0',
    'autor': 'Seu Nome'
}

Dessa forma, você pode importar a variável CONFIG com from meu_projeto import CONFIG e utilizar em qualquer lugar do seu código.

Definindo Exportações

Através do __init__.py, podemos definir quais módulos serão exportados quando o pacote for importado.

Usamos a variável especial __all__ para indicar quais nomes/módulos devem ser exportados:

1
2
# meu_projeto/__init__.py
__all__ = ['modulo1']

Com isso, ao importar o pacote, apenas modulo1 será acessível.

1
2
from meu_projeto import *
# Isso importará apenas 'modulo1'

Importações Relativas

O __init__.py também permite importações relativas dentro do pacote, facilitando a reutilização de código entre módulos:

1
2
3
# minha_aplicacao/__init__.py
from .modulo1 import funcao1
from .subpacote.modulo2 import Classe2

Está curtindo esse conteúdo? :thumbsup:

Que tal receber 30 dias de conteúdo direto na sua Caixa de Entrada?

Sua assinatura não pôde ser validada.
Você fez sua assinatura com sucesso.

Assine as PyDicas e receba 30 dias do melhor conteúdo Python na sua Caixa de Entrada: direto e sem enrolação!

Exemplo Completo

Para demonstrar como o __init__.py é utilizado em um projeto, vamos criar uma estrutura de projeto mais completa.

Estrutura do Projeto

Essa será a estrutura do projeto que vamos utilizar para demonstrar o uso do arquivo __init__.py:

1
2
3
4
5
6
minha_aplicacao/
    __init__.py
    modulo1.py
    subpacote/
        __init__.py
        modulo2.py

Implementação

  • Arquivo minha_aplicacao/__init__.py
1
2
3
4
5
6
print("Pacote 'minha_aplicacao' inicializado.")

from .modulo1 import saudacao
from .subpacote.modulo2 import ClasseDeExemplo

__all__ = ['saudacao', 'ClasseDeExemplo']
  • Arquivo minha_aplicacao/modulo1.py
1
2
def saudacao():
    return "Olá do módulo 1!"
  • Arquivo minha_aplicacao/subpacote/__init__.py
1
# Pode estar vazio ou ter importações/inicializações específicas
  • Arquivo minha_aplicacao/subpacote/modulo2.py
1
2
3
4
5
6
class ClasseDeExemplo:
    def __init__(self):
        self.mensagem = "Classe de exemplo do módulo 2 no subpacote."

    def exibir_mensagem(self):
        return self.mensagem

E aí, tá curtindo? Que tal aprender Python e Django DE VERDADE em um curso prático, voltado pro mercado?! :point_down:

Jornada Python Jornada Python

Utilização

Depois de criar a estrutura do nosso projeto, podemos importar e utilizar os módulos e classes conforme necessário:

1
2
3
4
5
6
# main.py (arquivo principal fora do pacote)
from minha_aplicacao import saudacao, ClasseDeExemplo

print(saudacao())
instancia = ClasseDeExemplo()
print(instancia.exibir_mensagem())

E a saída seria:

1
2
Olá do módulo 1!
Classe de exemplo do módulo 2 no subpacote.

Conclusão

Neste artigo, exploramos a funcionalidade e a importância do arquivo __init__.py em projetos Python.

Vimos que ele desempenha um papel crucial na indicação de pacotes, inicialização de pacotes e definição de exportações.

Além disso, através de exemplos práticos, mostramos como ele é utilizado na estruturação de projetos Python, tornando o código mais organizado e fácil de manter.

Esperamos que este artigo tenha esclarecido quaisquer dúvidas sobre o __init__.py e motivado você a aplicá-lo corretamente em seus próprios projetos.

Valeu e até a próxima!

#newsletter Olá :wave: Curtiu o artigo? Então faça parte da nossa Newsletter! Privacidade Não se preocupe, respeitamos sua privacidade. Você pode se descadastrar a qualquer momento.