ベスパライフ

日記・備忘録。ベスパもってないです。

Pythonに完全なプライベート関数がないのは、きっとユニットテストのしやすさを優先させたから

だと思います。

Pythonで完全なプライベート関数を作るとき、関数名の前に__(アンダースコア2つ)をつけます。しかし、このような使い方をしているコードは余り見たことありません。
Pythonの標準ライブラリのソースコードを眺めてみてもdef _func()ばかりが目につき、def __func()と書いてあるものは少ないように感じます。

現代プログラミングの手法にでテスト駆動開発というものがあります。テストの通っていないプログラムはGitに上げるなと言われるくらいです。自作関数をunittestするとき、当然テストしたい関数をしていするのですが、例えばクラス内のプライベート関数(__hoge()みたいなやつ)をテストさせようと思うと、ちょっと工夫が必要になります(ググれば出ます)。
その工夫をすればクラス内のプライベート関数でも外部アクセスできるようになり、ユニットテストしやすくなるのですが、工夫をすればアクセスできるということはそもそも「プライベート関数じゃないじゃん」となります。
だったらもうプライベート関数かユニットテストか、みたいな話になって、結果ユニットテストを優先したのではないでしょうか、という根拠のない妄想です。

確かにプライベート関数なくてもプログラミングに慣れた者同士のチーム開発なら問題ないと思うのですが、例えば初学者を交えた開発とか、初学者に対してプライベート変数とかの概念を教えることが難しいなどの理由から、今でも初学者向け学習のプログラミング言語C言語に軍配が上がるのかなあなどと思ったりなんたり。
いや、もしかしたらデータ構造や命名規則をしっかり学習すれば、プライベート変数みたいなスコープの概念は必要ないというアンチテーゼなのかもしれない。

まあ、ろくに調べはわけではないので、もしかしたらちゃんとした理由があるのかもしれません。適当に思ったことを書きましたとさ。