如果我有这些课程:
class MyObject:
def __init__(self, version):
self.version = version
class Builder:
def __init__(self,version='0.0.1'):
self.version = version
def build(self):
return MyObject(self.version)
是否可以通过简单地调用
versioned_obj = Builder('0.0.1')
#instead of going through
builder = Builder('0.0.1')
versioned_object = builder.build()
什么
已尝试使用__init__()
,但必须返回None
你有一个类
MyObject
。如果要在单个调用中实例化MyObject
,则根本不需要构建器,只需直接初始化MyObject
:回到您所问的,关于使用
Builder
类而不调用build()
:虽然可以让生成器类的构造函数通过重写__new__
返回MyObject
,但我确实不建议这样做如果不理解为什么有一个构建器类(似乎什么也不做),就很难推荐替代方案,但肯定有一些。根据您展示的代码,我不能推荐任何一种,因为它们毫无理由地增加了复杂性。但也许他们会给你一个适合你没有展示的代码的想法
生成器作为函数
在上面的示例中,没有明显的理由说明构建器需要存在,更不用说是一个类,但是如果您想要一个构建器,而它不必是一个类,那么它可以只是一个函数:
生成器工厂方法
或者,如果Builder类确实适合作为一个类,但您还没有向我们说明原因,则可以向Builder添加工厂方法:
使用生成器的函数
如果不想修改生成器类,但只需要一个调用:
您所指的似乎是
object.__new__
方法。创建类的实例时,将调用__new__
方法来创建并实际返回将被分配的对象,然后在分配之前调用它的__init__
方法示例
调用
myclass()
打印:注意:我没有把它包括在示例中,但是
__init__
被调用的*args, **kwargs
与__new__
相同相关问题 更多 >
编程相关推荐