再利用プログラムを意識して、後々楽ちんなプログラムにしていきましょ~

今日も、お仕事でプログラムを書いていたのですが、
まだまだレベルがイマイチなcacapon、
cacaponさんが書いたプログラムは、
他のプロジェクトに再利用できない形になっちゃってるね…

と指摘をもらいました~

確かに、「あ、あの機能いるよね」「あ、これも」とやっていたら、
そこのプロジェクト専用みたいになってしまいまして…

アドバイスも頂いたのですが、
簡単な実物を作ると理解の一助になるかと思いまして…

…再利用できそうなプログラムcalcを作ってみました♪
ただ、2つの数値を足し算するだけのプログラムです(笑

階層はこんな感じ

|--app
|  |--dir
|  |  |--child.py
|  |--parents.py
|--package
|  |--__init__.py
|  |--calc.py

プログラムはこんな感じです~

# calc.py
class Calc():
    @staticmethod
    def add(a, b):
        return a + b
# parents.py
import os
import sys
sys.path.append(os.path.dirname(os.path.abspath(__file__))+"\\..\\package")

from calc import Calc

print(Calc.add(1, 2))
# child.py
import os
import sys
sys.path.append(os.path.dirname(os.path.abspath(__file__))+"\\..\\..\\package")

from calc import Calc

print(Calc.add(3, 4))

実行結果

$ python app/parents.py
3

$ python app/dir/child.py
7

ちょっとパス追加の部分が冗長に感じますが、
ちゃんと動いてますね~

このプログラムを作って感じたメリットですが…
①ほかのプロジェクトでも使える。
②新機能は再利用プログラムをいじるだけでOK

→例えば、calcに引き算を定義すると、parentsも、childもすぐ使える。
③見るべきところが少なくなる。
→挙動が可笑しければcalcを見ればOK。
→あとは呼び出してる場所を見れば、引数エラーなどは見つけられる。

こう考えてみると、再利用前提で作るのって、
後々修正しやすい形にもなるんですね~
今度から意識して作っていきたいと思います~

bashなどで
export PYTHONPATH="/<importしたいディレクトリパス>:$PYTHONPATH"
とやると冗長な部分が無くなるのですが、
packageのパスが環境変数に追加されます。
このくらいのプログラムでpath追加するのはめんどくさいと判断し、
sys.path.apendで呼び出し先毎で設定するようにしました~