最近Pythonトリックを読み学びがあったのでメモまで。
概要
-
_
と__
の読み方知ってます? - Pythonで出てくる
_
と__
の組み合わせ - 各組み合わせの意味合い
- 感想
1. _
と__
の読み方知ってます?
Pythonトリックおすすめです。
-
_
:アンダースコア -
__
:ダンダー
と読むらしいです。自分は知らずにアンダーアンダースコアと読んでました(恥ずかしい
2. Pythonで出てくる_
と__
の組み合わせ
Pythonで_
と__
の組み合わせで主に使われているのは以下の5つ。
- 変数の先頭の
_
- 変数の末尾の
_
- 変数の先頭の
__
- 変数の先頭と末尾の
__
- 単一の
_
3. 各組み合わせの意味合い
組み合わせの意味合いは下記の通り。
変数の先頭の_
これはよく見ます。変数がプライベートであることを示しています。これはPythonのお約束の1つであり、外部からは普通にアクセスできます。
class TestUnder():
def __init__(self,a):
self._a = a
test = TestUnder(1)
test._a = 2
# _aは書き換わる
変数の末尾の_
定義する変数の末尾にアンダースコアを追加することで名前の衝突をさけることがあります。これもPythonのお約束の1つです。
変数の先頭の__
これも変数がプライベートであることを示しています。
ただし_
の場合と違い、プログラム上にも変化を及ぼします。
実はこれは完全なプライベート変数ではなく、
Python側が変数名を変更することで擬似的に作ったプライベート変数です。
class TestUnder():
def __init__(self,a):
self._a = a
test = TestUnder(1)
test._a = 2
# _aは書き換わる
class TestDunder():
def __init__(self,a):
self.__a = a
test = TestDunder(1)
# Attribute Errorが発生
# print(test.__a)
# 例外は発生せず一見、__aが書き換わるように見えるが、 __init__で設定した変数とは異なる
# test.__a = 2
# 実はこれでアクセスできてしまう
print(test._TestDunder__a)
変数の先頭と末尾の__
よく見る__init__
とかの特殊メソッドで使用されます。特別な理由なければ使わないほうがいいでしょう。
単一の_
変数が一時的なものや使用しないものを示すために使用されます。
test = ('Necessary','Unnecessary')
a,_ = test
感想
それぞれ知ってはいましたが、まとめたことはなかったので勉強になりました。
余談ですが、Pythonトリックいいよ。effective Pythonで挫折した自分でも読めました。
Python トリック(https://www.amazon.co.jp/dp/B085455WKV/)