nobu blog

プログラミングやゲームの話など。

*



pythonでDI(Dependency Injection)をやる方法

   

概要

pythonでDIでオブジェクトを注入する方法に関するメモ。

環境

python 3.7.6

背景

pythonにはC#やJavaにあるようなインターフェースが存在しないため、コンストラクタからインタフェースを渡してのDIが不可能。
代わりに抽象クラスの仕組みを利用する事で実現が可能。

方法

オブジェクト

まずは下記のようなPersonクラスを定義する。
単純な値を保持するクラスである。

このPersonクラスを取得できるようなクラスを抽象化して定義する。

実現方法

pythonには組み込みの機能としてabc(Abstract Base Class)といったものが提供されている。
このクラスを継承して抽象化したいメソッドに対して、abstractmethodをアノテーションとして付与する。
下記では、Personを全件返すfindAllメソッドを定義している。

この抽象クラスを継承して、メソッドを実装することで実現が可能。

あとは、こんな感じで抽象化された処理を引数として受け取るクラスを定義して使用する。

 - python