当我需要创建一些复杂的对象时,我更喜欢为它编写构建器。到目前为止是:
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():
这给了我构建器类的参数化以及在构建方法和嵌套方法中使用构建对象的简单方法。