Crear y acceder a un paquete de Python

Los paquetes son una forma de estructurar muchos paquetes y módulos que ayudan en una jerarquía bien organizada de conjuntos de datos, haciendo que los directorios y módulos sean de fácil acceso. Al igual que hay diferentes unidades y carpetas en un sistema operativo para ayudarnos a almacenar archivos, los paquetes nos ayudan a almacenar otros subpaquetes y módulos, para que el usuario pueda usarlos cuando sea necesario.

Creación y exploración de paquetes

Para decirle a Python que un directorio en particular es un paquete, creamos un archivo llamado __init__.py dentro de él y luego se considera como un paquete y podemos crear otros módulos y subpaquetes dentro de él. Este archivo __init__.py se puede dejar en blanco o se puede codificar con el código de inicialización del paquete.
Para crear un paquete en Python, debemos seguir estos tres simples pasos:

  1. Primero, creamos un directorio y le damos un nombre de paquete, preferiblemente relacionado con su funcionamiento.
  2. Luego ponemos las clases y las funciones requeridas en él.
  3. Finalmente, creamos un archivo __init__.py dentro del directorio, para que Python sepa que el directorio es un paquete.

Ejemplo de creación de paquete

Veamos este ejemplo y veamos cómo se crea un paquete. Vamos a crear un paquete llamado Autos y construir tres módulos en él, a saber, Bmw, Audi y Nissan.

  1. Primero creamos un directorio y lo llamamos Cars.
  2. Entonces necesitamos crear módulos . Para hacer esto necesitamos crear un archivo con el nombre Bmw.py y crear su contenido poniendo este código en él.

    # Python code to illustrate the Modules
    class Bmw:
        # First we create a constructor for this class
        # and add members to it, here models
        def __init__(self):
            self.models = ['i8', 'x1', 'x5', 'x6']
       
        # A normal print function
        def outModels(self):
            print('These are the available models for BMW')
            for model in self.models:
                print('\t%s ' % model)

    Luego creamos otro archivo con el nombre Audi.py y le agregamos un tipo de código similar con diferentes miembros.

    # Python code to illustrate the Module
    class Audi:
        # First we create a constructor for this class
        # and add members to it, here models
        def __init__(self):
            self.models = ['q7', 'a6', 'a8', 'a3']
      
        # A normal print function
        def outModels(self):
            print('These are the available models for Audi')
            for model in self.models:
                print('\t%s ' % model)

    Luego creamos otro archivo con el nombre Nissan.py y le agregamos un tipo de código similar con diferentes miembros.

    # Python code to illustrate the Module
    class Nissan:
        # First we create a constructor for this class
        # and add members to it, here models
        def __init__(self):
            self.models = ['altima', '370z', 'cube', 'rogue']
      
        # A normal print function
        def outModels(self):
            print('These are the available models for Nissan')
            for model in self.models:
                print('\t%s ' % model)
  3. Finalmente creamos el archivo __init__.py. Este archivo se colocará dentro del directorio Cars y se puede dejar en blanco o podemos poner este código de inicialización en él.

    from Bmw import Bmw
    from Audi import Audi
    from Nissan import Nissan
  4. Ahora, usemos el paquete que creamos. Para hacer esto, cree un archivo sample.py en el mismo directorio donde se encuentra el paquete Cars y agregue el siguiente código:

    # Import classes from your brand new package
    from Cars import Bmw
    from Cars import Audi
    from Cars import Nissan
       
    # Create an object of Bmw class & call its method
    ModBMW = Bmw()
    ModBMW.outModels()
       
    # Create an object of Audi class & call its method
    ModAudi = Audi()
    ModAudi.outModels()
      
    # Create an object of Nissan class & call its method
    ModNissan = Nissan()
    ModNissan.outModels()

    Varias formas de acceder a los paquetes

    Veamos este ejemplo e intentemos relacionar los paquetes con él y cómo podemos acceder a él.

    1. importar en Paquetes
      Supongamos que los directorios de autos y marcas son paquetes. Para que sean un paquete, todos deben contener el archivo __init__.py, ya sea en blanco o con algún código de inicialización. Supongamos que todos los modelos de los coches sean módulos. El uso de paquetes ayuda a importar cualquier módulo, individualmente o completo.
      Supongamos que queremos obtener Bmw i8. La sintaxis para eso sería:
      'import' Cars.Bmw.x5 

      Al importar un paquete o subpaquetes o módulos, Python busca en todo el árbol de directorios buscando el paquete en particular y procede sistemáticamente según lo programado por el operador punto.
      Si algún módulo contiene una función y queremos importar eso. Por ejemplo, a8 tiene una función get_buy(1) y queremos importar eso, la sintaxis sería:

      import Cars.Audi.a8
      Cars.Audi.a8.get_buy(1)
      

      Al usar solo la sintaxis de importación, se debe tener en cuenta que el último atributo debe ser un subpaquete o un módulo, no debe ser ninguna función o nombre de clase.

    2. ‘desde…importar’ en Paquetes
      Ahora, cada vez que necesitemos usar dicha función necesitaremos escribir toda la línea larga después de importar el paquete principal. Para superar esto de una manera más simple, usamos la palabra clave ‘from’. Para esto primero necesitamos traer el módulo usando ‘from’ e ‘import’:
      from Cars.Audi import a8

      Ahora podemos llamar a la función en cualquier lugar usando

      a8.get_buy(1)

      También hay otra forma que es menos larga. Podemos importar directamente la función y usarla donde sea necesario. Primero impórtalo usando:

      from Cars.Audi.a8 import get_buy

      Ahora llame a la función desde cualquier lugar:

      get_buy(1)
    3. ‘from…import *’ en Paquetes
      Mientras usamos la sintaxis from…import , podemos importar cualquier cosa, desde submódulos hasta clases, funciones o variables, definidas en el mismo módulo. Si el atributo mencionado en la parte de importación no está definido en el paquete, el compilador lanza una excepción ImportError.
      La importación de submódulos puede causar efectos secundarios no deseados que ocurren al importar submódulos explícitamente. Por lo tanto, podemos importar varios módulos a la vez usando la sintaxis *. La sintaxis es:
      from Cars.Chevrolet import *

      Esto importará todo, es decir, módulos, submódulos, funciones, clases, desde el subpaquete.

    Este artículo es una contribución de Chinmoy Lenka . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

    Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *