Maison >développement back-end >Tutoriel Python >`__init__.py` est-il toujours requis pour les packages Python dans la version 3.3 ?

`__init__.py` est-il toujours requis pour les packages Python dans la version 3.3 ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-29 00:33:15323parcourir

Is `__init__.py` Still Required for Python Packages in Version 3.3 ?

Le fichier __init__.py de Python n'est plus un élément obligatoire du package dans la version 3.3

Question

Est-il plus requis dans Python 3.3 ? Fournir le fichier __init__.py pour le package ?

Analyse

Introduction : Le rôle du fichier __init__.py

En Python, le rôle du fichier __init__.py est d'identifier un directory sous forme de package. Permet d'organiser les différents répertoires et modules de ce répertoire dans un espace de noms. Dans Python 2.7 et versions antérieures, le fichier __init__.py est requis pour créer un package.

Fichier __init__.py dans Python 3.3

Dans Python 3.3, le concept de packages d'espace de noms implicites a été introduit, ce qui le rend possible même sans fichiers et packages __init__.py peuvent également être créés. Cela signifie qu'un répertoire peut désormais être désigné comme package d'espace de noms et que le contenu de ce répertoire peut être modularisé.

Cas d'utilisation des packages d'espace de noms

Le cas d'utilisation le plus courant de cette fonctionnalité de package d'espace de noms implicite consiste à permettre à plusieurs bibliothèques de différents emplacements de contribuer des sous-packages à un parent emballer . Par exemple, supposons qu'il existe deux bibliothèques google_pubsub et google_storage, qui fournissent la structure suivante :

google_pubsub/              # 包 1
    google/                 # 命名空间包(没有 __init__.py)
        cloud/              # 命名空间包(没有 __init__.py)
            pubsub/         # 常规包(有 __init__.py)
                __init__.py # 必需的,用于创建常规包
                foo.py

google_storage/             # 包 2
    google/                 # 命名空间包(没有 __init__.py)
        cloud/              # 命名空间包(没有 __init__.py)
            storage/        # 常规包(有 __init__.py)
                __init__.py # 必需的,用于创建常规包
                bar.py

Dans ce cas, les répertoires google/ et google/cloud/ doivent être des packages d'espace de noms, de sorte que google_pubsub et The Le package google_storage est considéré comme un sous-package du même package parent.

Conclusion :

  • Il existe les deux types de packages Python suivants :

    • Package d'espace de noms (paquet implicite ) : Aucun fichier __init__.py n'est requis, utilisé pour contribuer le contenu de plusieurs bibliothèques à un package parent.
    • Packages réguliers (packages explicites) : nécessite un fichier __init__.py pour identifier le package et contient uniquement le contenu du répertoire actuel.
  • Dans la plupart des cas, il est toujours recommandé d'utiliser des packages standards (c'est-à-dire des packages avec des fichiers __init__.py) car ils sont plus simples et plus faciles à comprendre.
  • Le fichier __init__.py ne doit pas être utilisé uniquement dans les cas spécifiques où des packages d'espace de noms doivent être créés.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn