0

複雑なオブジェクトを作成する必要がある場合は、ビルダーを作成することを好みます。これまでのところ:

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(): 

これにより、ビルダークラスのパラメーター化と、ビルドメソッドおよびネストされたメソッド内での建物オブジェクトの簡単な使用方法が得られます。

4

1 に答える 1

0

Python では Java パターンの代わりにキーワード引数を使用する必要があります。つまり、他の完全に使用可能で優れたオブジェクト構成方法がある場合、Python でビルダー パターンを使用する理由がわかりません。

class Person:
    def __init__(self, name, age=UNKNOWN, gender=MALE):
        self.name = name
        self.age = age
        self.gender = gender

people.append(Person("Erik"))
people.append(Person("John", age=27))
people.append(Person("Pamela", gender=FEMALE))
people.append(Person("OldDude", gender=MALE, age=99))
于 2013-09-27T13:34:07.070 に答える