Pythonで一つのファイルにクラスを複数定義するべきか?
一つのファイルに一つのクラスというルールが存在するjavaとは違いpythonは複数のクラスを一つのファイルに定義しても別に規約上は問題ない。
しかし、実践的にはどちらが適切か??
Pythonのファイルは"module"と呼ばれる
まず、基本事実としてPythonのファイルは"module"*1呼ばれ、我々はpythonで実装された各moduleをインポートすることで使用する*2module単位でテストしたり、moduleの入れ替えで機能を追加変更したりすることができるようにこころがけるべきだ。moduleは、できるだけ他のmoduleとの結合度を弱めて、独立性を高めることが望ましい。
すでに述べたようにpythonではルール上一つのモジュールに複数のclassを定義してよいのだから、一つのモジュールにいくつクラスを定義するかはそのコードの規模と機能を、上のモジュールの要件を満たすように決めれば良い。当然クラスごとに分割しすぎるとファイル数が見る見る間に多くなって管理しづらいだろう。
まとめ:
Pythonではまとめて管理されるべきクラスならひとつのファイルに定義しても良い。
Ref
[Python] One module per class, bad idea? - Grokbase
use modules to organize things in a way that makes sense to the code that uses your components.
make the import statements look good.
きちんとシバンをつけるとfileコマンド でスクリプトの言語情報がでる
UNIX/Linuxではスクリプトの#!から始まる1行目でインタプリタを指定でき、これをシバン*1 と呼びます.
代表的なシバン
#!/bin/sh
#!/bin/bash
#!/usr/bin/perl
#!/usr/bin/env ruby
でここからが本題なのだが、Linuxのファイル識別コマンド file
を用いるとシバンを書いてるとちゃんとどの言語のシェルスクリプトなのかを教えてくれる。
すなわち以下のような結果を返す
test.py: Python script, ASCII text executable
- #!/usr/bin/pythonと書かなかった場合
test2.py: ASCII text
golangと並列化
golangの並行処理のサポート
Golangの特徴の一つとして並行処理のサポートが充実しておいることが挙げられる。よってgolangは,
Goでは,goroutineという軽量スレッドを用いて処理を並行に実施し,
理解すべき概念 :
- gorutine ( 名前はcoroutineのもじり )*2
- channel : 処理の競合を回避。データのやりとりをするときに使用(MPIのsend recive みたいなものか?)
select : 複数のチャネルから同時に受信
- Mutexes:MUTual EXclusion
特筆すべき注意点
- goroutineを作成するコストは極めて小さい*3
Frequently Asked Questions (FAQ) - The Go Programming Language