0

当我需要创建一些复杂的对象时,我更喜欢为它编写构建器。到目前为止是:

class Builder(object):
   def before(self):
      do..
   def build(self):
      do stuff
   def after(self):
      do..

它是单例的,所以我必须记住不要使用 self 来构建参数(对线程很重要),所以我需要在构建器的方法之间传递许多参数,或者将它们作为未完成(半构建)的对象传递。或者每次我想创建新的建筑对象时都创建构建器对象,这不是一个好的方法。

但是,当我开始使用 python 3 时,我更喜欢 builder 作为函数:

def builder():
    param1 = None
    param2 = None
    def before(self):
        do..
    def build():
        nonlocal param1
        build object ...
    def after(self):
        do..
    def ...(self):
        do..

它似乎更轻且线程安全,不是吗?这里有什么风险吗?我还能在哪里/如何申请非本地?

我现在正在重新考虑构建器模式的 pythonic 方法,我发现的是:

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 回答