2016-09-14 1 views
2

J'essaie de m'en tenir aux meilleures pratiques en matière d'importation de modules, j'essaie de comprendre ce que dit PEP8 à ce sujet. Disons que mon framework a des centaines de classes et quelques dizaines de paquets. Par exemple, PyQt5 ou sympy seraient de bons candidats ... quel serait le meilleur choix parmi cet ensemble?Conventions d'importation PEP8

a) Tout importer

from PyQt5.QtCore import * 
from PyQt5.QtGui import * 
from PyQt5.QtWidgets import * 

print(QPoint) 
print(QPixmap) 
print(QApplication) 

b) Importer uniquement de gros paquets et en utilisant des préfixes pour toute l'application

from PyQt5 import QtCore, QtGui, QtWidgets 

print(QtCore.QPoint) 
print(QtGui.QPixmap) 
print(QtWidgets.QApplication) 

c) importer des classes spécifiques des gros paquets

from PyQt5.QtCore import QPoint 
from PyQt5.QtGui import QPixmap 
from PyQt5.QtWidgets import QApplication 

print(QPoint) 
print(QPixmap) 
print(QApplication) 

L'option a) est déconseillée par PEP8, qu'en est-il de b) ou c) ... quelle est la recommandation du PEP8 à ce sujet?

+1

Personnellement, je préfère b) si vous utilisez plusieurs objets d'un module, sinon a). Mais il n'y a pas de règle pour cela dans PEP 8. –

+1

Il n'y a pas de réponse concrète. Si je prévois d'utiliser seulement quelques objets de chaque module, je les importe explicitement, comme dans (c). Si j'utilise beaucoup d'objets de chaque module, j'utilise habituellement (b). – Blender

+1

Cela dépend du contexte. J'utilise toujours (c) dans les applications, et (b) dans les tutoriels, exemples, documentation, etc. Je n'utilise jamais (a) - en expérimentant dans une session interactive, je préfère utiliser 'from PyQt5 import Qt' (qui met * tout * dans un seul espace de nom). Je ne me soucie pas particulièrement de savoir si mes pratiques de codage sont bien alignées avec pep8 (même si je pense que c'est le cas pour la plupart). La chose la plus importante que pep8 a à dire est la suivante: "Sachez quand être incohérent - parfois, les recommandations du guide de style ne sont pas applicables.En cas de doute, utilisez votre meilleur jugement". – ekhumoro

Répondre

0

Il n'y a pas de recommandation car cela dépend trop de votre projet et des conflits de noms potentiels que vous pouvez rencontrer. Si vous ne possédez pas déjà un objet QPoint (soit le vôtre, soit potentiellement d'un paquet différent), vous pouvez trouver plus facile de lire et d'écrire seulement le symbole QPoint là où c'est nécessaire.

Cependant, vous devez à l'avenir interagir avec un package différent qui fournit aussi un QPoint, vous devrez soit de se référer à eux via leur package parent, ou utiliser la syntaxe from PyQt5.QtCore import QPoint as PyQt5QPoint avant de se référer à PyQt5Point dans le code suivant.