[解決済み] PyCharmにパラメータの型を知らせるにはどうしたらいいですか?
質問
コンストラクタ、代入、メソッド呼び出しに関して、PyCharm IDEは私のソースコードを分析し、各変数がどの型になるべきかを判断するのがかなり得意です。それが正しいとき、私はそれが好きです。なぜなら、それは私に良いコード補完とパラメータ情報を与え、私が存在しない属性にアクセスしようとすると警告を出すからです。
しかし、パラメータに関しては、何も知らないのです。コード補完のドロップダウンでは、パラメータの型が分からないので、何も表示できません。コード解析では、警告を探すことができません。
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
peasant = Person("Dennis", 37)
# PyCharm knows that the "peasant" variable is of type Person
peasant.dig_filth() # shows warning -- Person doesn't have a dig_filth method
class King:
def repress(self, peasant):
# PyCharm has no idea what type the "peasant" parameter should be
peasant.knock_over() # no warning even though knock_over doesn't exist
King().repress(peasant)
# Even if I call the method once with a Person instance, PyCharm doesn't
# consider that to mean that the "peasant" parameter should always be a Person
これには一定の意味がある。他のコールサイトでは、そのパラメータに何でも渡すことができます。しかし、私のメソッドがパラメータの型を期待する場合、例えば
pygame.Surface
をすべて表示できるように、PyCharmに何らかの形でそれを示すことができればと思います。
Surface
の属性をコード補完のドロップダウンに表示したり、間違ったメソッドを呼び出したら警告をハイライトしたり、いろいろなことができます。
PyCharmにヒントを与えて、「psst, this parameter is supposed to be of type
X
ということでしょうか?(あるいは、動的言語の精神に則り、"このパラメータは、"quot "のように鳴ることになっています。
X
ということでしょうか。私はそれでいいと思うのですが)
EDITです。 以下のCrazyCoderさんの回答でうまくいきました。私のような初心者が簡単にまとめたい場合は、こちらをご覧ください。
class King:
def repress(self, peasant):
"""
Exploit the workers by hanging on to outdated imperialist dogma which
perpetuates the economic and social differences in our society.
@type peasant: Person
@param peasant: Person to repress.
"""
peasant.knock_over() # Shows a warning. And there was much rejoicing.
該当箇所は
@type peasant: Person
の行は、docstringの
また、ファイル > 設定 > Python 統合ツールで、 "Docstring format" を "Epytext" にすると、 PyCharm の View > Quick Documentation Lookup が、パラメータ情報をそのまま出力するのではなく、きれいに出力してくれます。
どのように解決するのですか?
はい、メソッドとそのパラメータに特別なドキュメント形式を使用することで、PyCharmがその型を知ることができます。最近のPyCharmのバージョン 最も一般的なドキュメント形式をサポート .
例えば、PyCharmは 引数のスタイルコメント .
参照 reStructuredText と docstringの規約 (PEP 257) を参照してください。
また、Python 3 のアノテーションという選択肢もあります。
お願い PyCharmのドキュメントのセクションを参照してください。 は、詳細とサンプルをご覧ください。
関連
-
Python Decorator 練習問題
-
Pythonによるjieba分割ライブラリ
-
[解決済み】Flask ImportError: Flask という名前のモジュールがない
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] 割り当て後にリストが予期せず変更されました。その理由と防止策を教えてください。
-
[解決済み] Windowsにpipをインストールするにはどうしたらいいですか?
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】type()とisinstance()の違いは何ですか?)
-
[解決済み】メソッドの型ヒントは、どのようにエンクロージャクラスの型を使用するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Python入門 openを使ったファイルの読み書きの方法
-
Pythonショートビデオクローラーチュートリアル
-
[解決済み】お使いのCPUは、このTensorFlowバイナリが使用するようにコンパイルされていない命令をサポートしています。AVX AVX2
-
[解決済み】RuntimeWarning: 割り算で無効な値が発生しました。
-
[解決済み】インポートエラー。モジュール名 urllib2 がない
-
[解決済み】SyntaxError: デフォルト以外の引数がデフォルトの引数に続く
-
[解決済み] TypeError: 'DataFrame' オブジェクトは呼び出し可能ではない
-
[解決済み】NameError: 名前 'self' が定義されていません。
-
[解決済み】cアンダースコア式`c_`は、具体的に何をするのですか?
-
[解決済み】 'numpy.float64' オブジェクトは反復可能ではない