複雑なオブジェクトを作成する必要がある場合は、ビルダーを作成することを好みます。これまでのところ:
class Builder(object):
def before(self):
do..
def build(self):
do stuff
def after(self):
do..
それはシングルトンなので、パラメーターの作成に self を使用しないことを覚えておく必要があります (スレッドにとって重要)。そのため、ビルダーのメソッド間で多くのパラメーターを渡すか、未完成の (半分構築された) オブジェクトとして渡す必要があります。または、新しい建物オブジェクトを作成するたびにビルダーオブジェクトを作成しますが、これは良いアプローチではありません。
ただし、Python 3 の使用を開始するときは、関数としてビルダーを使用します。
def builder():
param1 = None
param2 = None
def before(self):
do..
def build():
nonlocal param1
build object ...
def after(self):
do..
def ...(self):
do..
軽量でスレッドセーフなようですね。ここにリスクはありますか?他にどこで/どのように非ローカルを適用できますか?
私は今、ビルダーパターンへのpythonicアプローチをrethingしています。私が見つけたものは次のとおりです。
class Builder:
def build(self):
param = None
def _build_step1():
これにより、ビルダークラスのパラメーター化と、ビルドメソッドおよびネストされたメソッド内での建物オブジェクトの簡単な使用方法が得られます。