奇特なブログ

「殊勝に値する行いや心掛け」を意味する、奇特な人になる為のブログです

Pythonに少し触れた感想

今回は、新しい言語を学ぶ際に個人的にやっている、以下を作りましたので、
主に、その時の感想になります。
また、誤り等があった際には、ご指摘いただけると助かります。

https://github.com/kitoku-magic/user_registration_form/tree/sqlalchemy_raw/python


1.タイプヒント

mypyという、実行「前」に静的にチェックする道具はあるみたいですけど、
実行「時」に、エラーにはしてくれないみたいですね。
PHP7との比較ですが、この点は若干残念な気もしますね。


2.アクセス修飾子

privateはあるみたいですが、protectedはないみたいで。
あと、private変数も、比較的簡単にアクセスする抜け道があるみたいで。
PHPも、Reflectionとか使えばですけど、
でも「Reflection」で検索すれば、一発で分かりますからね(笑)
Pythonだと、構文的には正規表現で調べられるかどうかといった所でしょうか。


3.uWSGIの、ファイル修正後の再起動について

基本的には再起動してくれるみたいですけど、
シンタックスエラーが一度でも発生すると、
その後は、再起動してくれなくなるみたいですね。
これ、何とかならないんですかね・・・シンタックスエラーを起こさない?・・・それは無理です(笑)


4.SQLAlchemyにおける静的プリペアドステートメントなど

静的プリペア以外にも、大変な箇所は沢山(モデルクラスの継承関係を作ったりとか)あったんですが、
以下の実装をご覧の通り、O/Rマッパーを使っている意味があんまり(勿論あるのは確かですが)ないという残念な形に(苦笑)
特に、「repository.py」が顕著ですね。

https://github.com/kitoku-magic/user_registration_form/blob/sqlalchemy_raw/python/src/instance/__init__.py.default#L13

https://github.com/kitoku-magic/user_registration_form/blob/sqlalchemy_raw/python/src/db_connection.py#L14

https://github.com/kitoku-magic/user_registration_form/blob/sqlalchemy_raw/python/src/model/repository/repository.py

「db.session」みたいな形で且つ、静的プリペアが出来れば、ベストなんですがね。
静的プリペアじゃなくても勿論良いんですけど、慣れているからっていうのと、
単にDBライブラリのテストの手間を減らしたかっただけですね。


と、特に印象に残った所を挙げました。
別にdisるつもりは無かったんですが、
少なくとも現時点(まだ始めたばかりですので)では、デメリットが目についてしまいましたね。
ただ、↑の点も単に知らないだけで、すぐにひっくり返る気もしますけど。
PHPとの比較は、むしろPHPが優れているんじゃないですかねコレ。
少なくとも、「PHPを避ける」は、特にVer7以降は殆ど考えなくて良いのではと。


あと、Flaskにしたのは、「マイクロ」フレームワークを触ってみたかったからですね。
実装量は勿論多くなりますけど、カスタマイズ性は高いのでPJ次第ですが選択の余地はあるかと。


あと、今後ですが上述の件以外ですと、特に以下辺りが改善点ですね。

1.importの仕組みが分かる様な分からない様な(あと、どうやって書くのがベストかとかも)
2.mypyに関連して、一部のクラス(Flaskのrequestクラスとか)がどうやってもタイプヒンティング出来ない点
3.基本的なデータ型の使い分けや、良い関数・悪い関数(どの言語にも多分あるでしょう?)の使い分け(要するにベストプラクティス)
【追記】4.DB(SQLAlchemy)のマスター・スレーブ対応

まぁ、以下はかなり参考になると思いましたけどね。

Pythonを書き始める前に見るべきTips - Qiita

また、ここまでで参考にしたサイトは・・・数え切れませんので、
Python関係のページを作成した皆さん全員に向けて、ありがとうございます。
ひとまずは、ここまでにします。