Вопрос

Я использую PYQT и бегаю в эту проблему. Если мои операторы импорта:

from PyQt4.QtCore import *
from PyQt4.QtGui import *

Затем пилинт дает сотни предупреждений «неиспользованного импортного». Я нерешительно, чтобы просто отключить их, потому что может быть другой неиспользованный импорт, который на самом деле полезно видеть. Другой вариант будет делать это:

from PyQt4.QtCore import Qt, QPointF, QRectF
from PyQt4.QtGui import QGraphicsItem, QGraphicsScene, ...

И я в конечном итоге 9 классов на линии Qtgui. Есть третий вариант, который есть:

from PyQt4 import QtCore, QtGui

а затем префикс всех классов с помощью QTCORE или QTGUI, когда я их использую.

На данный момент я агностик, насколько я в конечном итоге делаю в моем проекте, хотя последний кажется самым болезненным с моей точки зрения. Какие обычные практики здесь? Есть ли технические основания использовать один стиль над другим?

Это было полезно?

Решение

Ответ на заголовок вашего вопроса - «Да»: я рекомендую никогда не использовать from ... import *, И я обсудил причины в другом очень недавнем ответе. Кратко, квалифицированные имена хорошо, Бараменты очень ограничены, поэтому «третий вариант» является оптимальным (как вы будете использовать квалифицированные имена, а не барамеры) среди тех, которые вы представляете.

(Преимущества квалифицированных наименований WRT Barenames включают в себя простоту подделки / издевательства для целей тестирования, уменьшается до обрученного риска незаметных ошибок, вызванных случайным ремингом, способностью «полуфальти» верхнего имени в «классе отслеживания» с целью регистрации именно то, что вы используете и ослабляете такие действия как профилирование, а также так далее - недостатки, почти ни о чем ... см. Также последнее, но не менее, коан в дзен Питона, import this в подсказке интерактивного переводчика).

Одинаково хорошо, если вы обидели 7 дополнительных персонажей, чтобы сказать QtCore.whatever, чтобы сократить - from PyQt4 import QtCore as Cr а также from PyQt4 import QtGi as Gu (Тогда используйте Cr.blah а также Gu.zorp) или т.п. Как и все сокращения, это стиль компромисса между близостью и ясности (вы бы предпочли бы назвать переменную count_of_all_widgets_in_the_inventory, num_widgets, или x? Часто средний выбор был бы лучшим, но не всегда ;-).

Кстати, я бы не использовал более одного as пункт в одном from или import Заявление (может быть запутано), я бы предпочел бы иметь несколько заявлений (также проще отлаживать, если какой-либо импорт предоставляет проблему, редактировать, если вы измените свой импорт в будущем, ...).

Другие советы

Есть также хорошие случаи для import *. Отказ т.е. Предварительно для разработчиков Django есть много конфигурационных файлов и цепочки их, используя импорт *:

settings.py:
FOO = 1
BAR = 2
DEBUG = False

test_settings.py:
from settings import *
DEBUG = True

В этом случае большинство недостатков import * стать преимуществами.

Python Doc. говорит:

Although certain modules are designed to export only names that follow certain patterns when you use import *, it is still considered bad practise in production code.

Он может иметь побочные эффекты и быть очень трудно отлаживать

Персоналы, я использую import скорее, чем from import потому что я нахожу ужасные большие декларации в начале файла, и я думаю, что он сохраняет код более читабельным

import PyQt4

PyQt4.QtCore

Если имя модуля слишком длинное и можно переименовать локально с помощью as ключевое слово. Например:

 import PyQt4.QtCore as Qc

Я надеюсь, что это помогает

Я использую «импорт *» для модулей PYQT, которые я использую, но я помещаю их в свой собственный модуль, поэтому он не загрязняет пространство имен пользователя. например

В Qt4.py:

 От Pyqt4.qtcore Импорт * из PYQT4.QTGUI Импорт *

Тогда используйте это так

 Импорт qt4 app = qt4.qapplication (...)

Импорт для PYQT4 - это особый случай.
Иногда я выберу «первый вариант» для быстрой и грязного кодирования и поверните его на «второй вариант», когда код растет дольше и дольше.
Столкновение пространства имен, может быть, не очень хорошая сделка, я не видел, что другие Package'name начинается с большого «Q». И всякий раз, когда я заканчиваю сценарий PYQT4. Конвертировать "из pyqt4.qtgui" Импорт * "на sth. подобно "

from PyQt4.QtGui import (QApplication, QDialog, QLineEdit, QTextBrowser,
                         QVBoxLayout)

"Просто FYI, скобки для многострочного импорта здесь удобно.

Я слишком абсолютно против import * в общем случае. На случай, если PySide2, Один из редких исключений применяется:

from PySide2 import *

это шаблон для импорта всех известных модулей из PySide2. Отказ Этот импорт очень удобный, потому что импорт всегда правильный. Константа вычисляется из CMAKE генератор. Очень полезно, когда быстро попробовать что-то в интерактивной консоли, но и в автоматизированном тестировании.

Для расширенного использования, это также имеет смысл использовать PySide2.__all__ Переменная напрямую, которая реализует эту функцию. Элементы PySide2.__all__ заказывается зависимостью, поэтому сначала приходит QtCore, тогда QtGui, QtWidgets, ... и так далее.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top