63

私は PyQt を使用しており、この問題に直面しています。私のインポートステートメントが次の場合:

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

次に、pylint は何百もの「未使用のインポート」警告を出します。実際に見るのに役立つ他の未使用のインポートがある可能性があるため、それらをオフにすることをためらっています。別のオプションは、これを行うことです:

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

QtGuiラインで9つのクラスを持つことになります。次の 3 番目のオプションがあります。

from PyQt4 import QtCore, QtGui

そして、それらを使用するたびに、すべてのクラスに QtCore または QtGui のプレフィックスを付けます。

この時点で、自分のプロジェクトで最終的にどれを実行するかはわかりませんが、私の観点からは最後のものが最も苦痛に思えます。ここでの一般的な慣行は何ですか?あるスタイルを他のスタイルよりも優先して使用する技術的な理由はありますか?

4

6 に答える 6

64

あなたの質問のタイトルに対する答えは「はい」です。私は決して使用しないことをお勧めしfrom ... import *ます。その理由については、別のごく最近の回答で説明しました。簡単に言うと、修飾名は適切であり、ベアネームは非常に限られているため、提示するものの中で「3番目のオプション」が最適です(ベアネームではなく修飾名を使用するため)。

(ベアネームに対する修飾名の利点には、テスト目的での偽造/モックの容易さ、偶発的な再バインドによって引き起こされる見過ごされたエラーのリスクの無効化、ロギングの目的で「トレースクラス」のトップネームを「半偽造」する機能が含まれます正確に使用しているものと、プロファイリングなどのアクティビティの緩和-不利な点はほとんどありません...import thisインタラクティブなインタプリタプロンプトで、Zen of Pythonの最後ではあるが最小ではない公案も参照してください)。

同様に良いのは、7つの余分な文字を恨んで言う場合、-と(次にandを使用する)などQtCore.whateverを短縮することです。すべての略語と同様に、これは簡潔さと明快さの間のスタイルのトレードオフです(変数、、、または?のどちらかと言えば、中間の選択が最適ですが、常にではありません;-)。from PyQt4 import QtCore as Crfrom PyQt4 import QtGi as GuCr.blahGu.zorpcount_of_all_widgets_in_the_inventorynum_widgetsx

ところで、私は単一のステートメントまたはステートメントで複数のas句を使用しません(混乱する可能性があります)、むしろ複数のステートメントが必要です(インポートに問題がある場合はデバッグしやすく、将来インポートを変更する場合は編集します) 、...)。fromimport

于 2010-09-01T05:17:18.943 に答える
24

の良いケースもありますimport *。すなわち。Django開発者は、多くの構成ファイルを持ち、インポートを使用してそれらをチェーンするのが一般的です*:

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

test_settings.py:
from settings import *
DEBUG = True

In this case most disadvantages of import * become advantages.

于 2010-09-01T05:24:26.620 に答える
3

Python docは次のように述べています。

特定のモジュールは、import * を使用するときに特定のパターンに従う名前のみをエクスポートするように設計されていますが、製品コードでは依然として悪い習慣と見なされています。

副作用があり、デバッグが非常に困難になる可能性があります

個人的には、ファイルの先頭に非常に大きな宣言があり、コードが読みやすくなっていると思うためではimportなく、使用していますfrom import

import PyQt4

PyQt4.QtCore

asモジュール名が長すぎて、キーワードを使用してローカルで名前を変更できる場合。例えば:

import PyQt4.QtCore as Qc
于 2010-09-01T05:09:14.840 に答える
1

使用する PyQt モジュールには「import *」を使用しますが、それらを独自のモジュールに配置するため、ユーザーの名前空間を汚染しません。例えば

qt4.py で:

PyQt4.QtCore インポートから *
 PyQt4.QtGui インポートから *

次に、このように使用します

qt4をインポート
 app = qt4.QApplication(...)
于 2013-02-25T16:06:58.740 に答える
0

PyQt4 のインポートは特殊なケースです。
ときどき、手早く汚いコーディングを行う場合は「最初のオプション」を選択し、コードがどんどん長くなってきたら「2 番目のオプション」に変更します。
名前空間の衝突はここでは大したことではないかもしれません。他のパッケージ名が大きな「Q」で始まるのを見たことがありません。PyQt4 スクリプトを終了するたびに。"from PyQt4.QtGui import *" を sth に変換します。お気に入り "

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

"参考までに、複数行のインポートの括弧はここで便利です。

于 2010-09-02T07:07:53.127 に答える