编写构建器的最佳方法以及如何使用非本地:python

时间:2013-09-27 13:26:00

标签: python python-3.x builder

当我需要创建一些复杂的对象时,我更喜欢使用write builder。 到目前为止:

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..
它似乎更轻,线程安全,不是吗?有风险吗? 我可以在哪里/怎么做非本地的?

我现在对建筑师模式我有点狡猾的方法我发现的是:

class Builder:
   def build(self):
       param = None
       def _build_step1(): 

它给出了构建器类的参数化以及在构建方法和嵌套方法中使用构建对象的简单方法。

1 个答案:

答案 0 :(得分:0)

你应该只是在Python中使用关键字参数而不是Java模式 - 换句话说,如果有其他的,完全可用的和更好的组合对象的方法,我不明白为什么你会在Python中使用构建器模式。 / p>

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