77 votes

pourquoi devrais-je mettre du code python dans les fichiers __init__.py

Je recherche le type de code que je mettrais dans les fichiers __init__.py et quelles sont les meilleures pratiques en la matière. Ou est-ce une mauvaise pratique en général?

Toute référence à des documents connus expliquant cela est également très appréciée.

68voto

Praveen Gollakota Points 8440

Les bibliothèques et les cadres utilisent généralement le code d'initialisation en __init__.py fichiers parfaitement se cacher interne de la structure et de fournir une interface uniforme pour l'utilisateur.

Prenons l'exemple de Django formes module. Diverses fonctions et de classes dans les formes module sont définis dans des fichiers différents en fonction de leur classification.

forms/
  __init__.py
  extras/
    ...
  fields.py
  forms.py
  widgets.py
  ...

Maintenant, si vous créez un formulaire, il vous faut savoir dans quel fichier chaque fonction est définie et votre code pour créer un formulaire de contact devra ressembler à ceci (qui est incovenient et laid).

 class CommentForm(forms.forms.Form):
    name = forms.fields.CharField() 
    url = forms.fields.URLField()
    comment = forms.fields.CharField(widget=forms.widgets.Textarea) 

Au lieu de cela, dans Django, vous pouvez tout simplement se référer à différents widgets, les formulaires, les champs, etc. directement à partir des formes de l'espace de noms.

from django import forms

class CommentForm(forms.Form):
    name = forms.CharField()
    url = forms.URLField()
    comment = forms.CharField(widget=forms.Textarea)

Comment est-ce possible? Pour rendre cela possible, Django ajoute la déclaration suivante à l' forms/__init__.py le fichier d'importation, tous les widgets, les formulaires, les champs, etc. dans l' forms d'espace de noms.

from widgets import *
from fields import *
from forms import *
from models import *

Comme vous pouvez le voir, cela simplifie la vie lors de la création des formes, parce que maintenant vous n'avez pas à vous soucier de, où chaque fonction/classe est définie et il suffit d'utiliser l'ensemble de ces directement à partir de forms d'espace de noms. C'est juste un exemple, mais vous pouvez voir des exemples comme ceux-là dans d'autres frameworks et bibliothèques.

11voto

darvin Points 116

Une des meilleures pratiques dans ce domaine consiste à importer toutes les classes nécessaires de votre bibliothèque (regardez mongoengine , par exemple). Ainsi, l'utilisateur de votre bibliothèque peut faire ceci:

 from coollibrary import *
 

au lieu

 from coollibrary.package import OneClass
from coollibrary.anotherpackage import SecondClass
 

En outre, la bonne pratique consiste à inclure dans __ init __.py version constante

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X