同じインターフェース(同じ 'duck-type')のさまざまな実装間で 'コンパイル時'の切り替えを実現する自然な仕組みを見つけようとしています。同じ機能を実装し、それぞれNumber1.py
とNumber2.py
で定義されたモジュールエイリアシングを使用したさまざまな実装間の切り替え
class Number1(object)
...
def fromBytes(byteArray):
...
class Number2(object)
...
def fromBytes(byteArray):
...
、:
は、私はいくつかの工場の機能を持つ2つのクラスがあるとします。私は、次のimport
の文で始まるクライアントコードを記述したいと思います:
import Number
私Number.py
モジュールは、単に実装の選択(たとえばNumber1
とNumber2
間が行われる)ファイルです。私は当初Number.py
として離れてやって考えていた:
import Number1 as Number
を私のクライアントコードで。しかし、いくつかのクライアントモジュールにその選択肢を複製するのではなく、自分のプロジェクトで選択した実装をプロジェクトの単一の場所に指定することをお勧めします。
私は次のようにNumber.py
を定義するので考えた:
from Number import Number
:
# choose your implementation here
import Number1
Number = Number1
しかし、この解決策は、私のクライアントモジュールで始まる持っている私を強制します。私は単純なimport Number
を持っていますし、Number.ZERO
、Number.fromBytes(...)
のように私の工場の機能を呼び出してください...これを行うためのpythonic方法は何ですか?
ありがとうございます!できるだけ早く回答を受け入れる –