Aula 14 – Python – Pacotes – Packages

More videos
Views
   

Pacotes ou python packages

Pacotes em python

Pacotes em python

Na aula passada vimos o que são módulos.

Segundo a documentação, um módulo consisde de um único arquivo.

Agora vamos entender o que são pacotes.

Pacotes são módulos também. Eles são apenas embalados de forma diferente.

Eles são formados pela combinação de um diretório mais o arquivo __init__.py.

Eles são módulos que podem conter outros módulos, isto é, uma coleção de módulos em diretórios que fornecem uma hierarquia de pacotes.

Em sua definição precisa, um módulo é um objeto na memória de um interpretador Python, geralmente criado pela leitura de um ou mais arquivos no disco.

Módulos e Pacotes é a maneira do Python organizar e estruturar códigos.

Um pacote é uma coleção de módulos em uma pasta. O nome do pacote é o nome da pasta.

Pacotes são identificados pelo interpretador pela presença de um arquivo com o nome “__init__.py“.

O arquivo “__init__.py” pode ser vazio ou conter algum código de inicialização do pacote ou definir uma variável chamada __all__, com uma lista de módulos do pacote que serão importados quando for usado “*“.

Sem o arquivo __init__.py, o Python não identifica a pasta como um pacote válido.

Os dois __init__.py do exemplo dessa aula são arquivos vazios, tanto o do pacote ecommerce como o do pacote payments.

Veja abaixo a seguinte estrutura de pastas:

parent_directory/
    main.py
    ecommerce/
        __init__.py
        database.py
        products.py
        payments/
            __init__.py
            paypal.py
            authorizenet.py

Crie esses arquivos nessa hierarquia de pastas: parent_directory/main.py


"""Módulo principal.
"""
import ecommerce.products
from ecommerce.payments.paypal import PayPal

def main():
    """Função principal da aplicação.
    """
    product = ecommerce.products.Product()
    print(product)

    PayPal()


if __name__ == "__main__":
    main()

parent_directory/ecommerce/products.py

#Um ponto só no import, porque o database.py tá na mesma pasta
from .database import Database

class Product:
    '''Essa é a classe produto'''
    database = Database()
    
    if database:
        print("Eu importei um database")
    
    def __str__(self):
        return str("Eu sou um produto!")

parent_directory/ecommerce/database.py


class Database: # the database implementation
    def __str__(self):
        return str("Eu sou um database!")

database = None

def initialize_database():
    global database

database = Database()

Nós adiamos a criação do banco de dados até que seja realmente necessário chamando a função initialize_database para criar a variável do módulo database.

parent_directory/ecommerce/payments/authorizenet.py


class Authorizenet:
    '''Essa é a classe Authorizenet'''
    pass

parent_directory/ecommerce/payments/paypal.py


from ..database import Database

class PayPal:
    '''Essa é a classe PayPal'''
    database = Database()
    if database:
    	print("Eu sou o paypal do módulo payments, eu importei e instanciei um database")

O uso do comando pass é apenas para não precisar definir uma classse ou função, como aqui são apenas exemplos, não queremos que o python reclame pelo fato de definir uma classe ou função e não fazer nada dentro delas.

O pass serve literalmente para deixar passar.

Veja como os imports dos pacotes e seus módulos funcionaram.

Através dos prints dos códigos acima, dá para entender como funciona a hierarquia de pastas e módulos na estrutura mostrada como exemplo.

É isso, na próxima aula veremos a biblioteca padrão do python.

Aproveito para deixar meu link de afiliados na Hostinger, tá valendo a pena, dêem uma olhada: Hostinger

Dêem um joinha 👍 na página do Código Fluente no Facebook
Facebook

Esse é meu link de referidos na digitalocean pra vocês.

Quem se cadastrar por esse link, ganha $100.00 dólares de crédito na digitalocean:

Digital Ocean

Esse outro link é da one.com:

One.com

Obrigado, até a próxima e bons estudos. 😉

About The Author
-

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>