Страницы

Поиск по вопросам

вторник, 28 января 2020 г.

Правильность импртов PyQt

#python #python_3x #pyqt5


Какие из ниже перечисленных импортов являются более правильными по скорости и по
читаемости. 

1 вариант

import sys
from PyQt5.QtWidgets import *


class Io(QWidget):
    def __init__(self):
        super().__init__()
        b = QCommandLinkButton("Переход")
        layout = QVBoxLayout()
        layout.addWidget(b)
        self.setLayout(layout)
        self.show()


if __name__ == "__main__":
    app = QApplication(sys.argv)
    main = Io()
    sys.exit(app.exec_())




2 вариант

import sys
from PyQt5 import QtWidgets


class Io(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        b = QtWidgets.QCommandLinkButton("Переход")
        layout = QtWidgets.QVBoxLayout()
        layout.addWidget(b)
        self.setLayout(layout)
        self.show()


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    main = Io()
    sys.exit(app.exec_())




3 вариант

import sys
from PyQt5.QtWidgets import QWidget, QApplication, QVBoxLayout, QCommandLinkButton


class Io(QWidget):
    def __init__(self):
        super().__init__()
        b = QCommandLinkButton("Переход")
        layout = QVBoxLayout()
        layout.addWidget(b)
        self.setLayout(layout)
        self.show()


if __name__ == "__main__":
    app = QApplication(sys.argv)
    main = Io()
    sys.exit(app.exec_())

    


Ответы

Ответ 1



Есть замечательное правило, действующее во многих командах "Заимпортил звёздочку - получил по мордочке". А выбор между вторым и третьим вариантом - пожалуй, дело вкуса.

Ответ 2



Если вы хотите все qt имена в одном пространство имён импортировать, можно Qt использовать: from PyQt5 import Qt Это позволяет писать: Qt.QApplication, Qt.QPoint, Qt.QPainter, etc. Недостаток, что все qt модули импортируются, увеличивая время загрузки и потребляемую память, если фактически вам нужны только отдельные модули. Не используйте from module import * за исключением специальных случаев: в REPL или в __init__.py файле. Пример оправданного использования: asyncio/__init__.py—asyncio предоставляет "плоский" публичный интерфейс (имена доступны прямо как asyncio.name), не смотря на то что реализация распределена по многочисленным вложенным модулям. Можно ли отнести импорты pyqt к специальным случаям, зависит могут ли конфликтующие имена появиться сегодня и в будущем (если все имена в __all__ начинаются с Q*, то нет опасности, что вы их перепутаете со своими). Не применяйте правила вслепую, используйте голову PEP-8: "A Foolish Consistency is the Hobgoblin of Little Minds."

Комментариев нет:

Отправить комментарий