# 特殊メソッドしたい(``__dunder__``) Pythonで書かれたソースコードを読んでいると、``__``で囲まれたメソッド名が目に入ってきます。 これは``__特殊メソッド__``を意味していて、ふたつのアンダースコアが連なるため**ダンダー(dunder)**と呼ばれてます。 また、ひとつのアンダースコアを変数名の前につけて内部変数を意味したり、 変数名の後ろにつけて仮変数とする慣習もあります。 ## プライベート変数したい(``_変数名`` / ``_関数名()``) ```python def _internal_function(...): pass ``` 変数名や関数名の先頭に``_``をつけて、プライベートであることを表します。 :::{caution} Pythonの仕組み的に、C++のようなプライベート変数はありません。 ヒトの目でみてプライベート変数のように見えるだけで、``モジュール名._変数名``で変数にアクセスできます。 呼び方と実装が一致していないので、C++などから来たひとは戸惑うかもしれませんが、 個人的には、セッター/ゲッターを書かなくてもいいので便利だなと感じます。 ::: ## 一時変数したい(``_``) ```python for i in range(10): time.sleep(1) # i を使わないので、次のように書いてもOK for _ in range(10): time.sleep(1) ``` 返り値を受け取る必要がない場合、``_``で代用できます。 ## 仮変数したい(``変数名_``) ```python type_ = type(変数) ``` 使いたい変数名が、Pythonの予約語と重なってしまう場合は、変数名のあとに``_``をつける慣習があります。 できるかぎり命名規則に沿った変数名を考えるべきですが、 スコープの範囲が狭かったり、一時的な変数の場合には、このようにしてもよいと思います。