【Python】Pythonコードにでてくるアンダースコアの意味は?
以下の記事でdjangoチュートリアルをやりながら、初めてまともにPythonコードを読んでみて気になったことがありました。
コードの中にアンダースコアで囲まれた変数があったりしました。
これまでjavaやPHPをやってきて、このような書き方をみたことがなかったので、どのようなものか調べました。
Pythonではアンダースコアで変数を囲う?
djangoの管理コマンドユーティリティファイルである「manege.py」に以下のようなコードがありました。
if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "trade_server.settings") try: from django.core.management import execute_from_command_line except ImportError as exc: raise ImportError( "Couldn't import Django. Are you sure it's installed and " "available on your PYTHONPATH environment variable? Did you " "forget to activate a virtual environment?" ) from exc execute_from_command_line(sys.argv)
nameをアンダースコアで囲っていますね。
これにどのような意味があるのか調べてみました。
アンダースコアの意味は?
上記は半角のアンダースコア(_)2つずつを前後囲ったものですが、それだけではないです。
アンダースコア1個で囲ったものもあります。他にも前にだけアンダースコアがついたものや後ろにだけついたものもあります。
それぞれ、以下のような役割があるみたいです。
・アンダースコア2個で囲う(”__hogehoge__”)
→Python上でコアな役割をもった変数やメソッドへ付与する。個人開発レベルでは使うことはない模様。
・アンダースコア1個で囲う(”_hogehoge_”)
→このような書き方はしない。
・アンダースコア2個前につける(”__hogehoge”)
→外部参照をしない変数やメソッドとするために付けている。アンダースコア2つをつけることで「マンダリング」が行われ、Javaでいうprivate修飾子のような役割ができるようです。(マンダリングがどのようなものかは理解できていないです…)
継承の時に問題が起こることがあるらしい。(その場合はアンダースコア1個を使うみたいです。)
・アンダースコア1個前につける(”_hogehoge”)
→極力外部から参照しないものを明記したものらしいです。実際には外部から参照することも可能なようです。
・アンダースコア1個後ろにつける(”hogehoge_”)
→他の変数との衝突を避けるためにつけるようです。
まとめ
Pythonではアンダースコアによって、変数やメソッドのスコープを決めているようですね。
これ以外にも気になったことがあれば、備忘録としてまとめたいと思います。
参考資料
ディスカッション
コメント一覧
まだ、コメントがありません