如何在Python中创建一个生成不同类的Factory方法?

问题描述 投票:1回答:1

目前,我有以下内容:

class ConfirmStepAView(UpdateProcessView):
    form_class = ConfirmationForm

    def validate(self):
        if not self.process.A: 
            raise ValidationError

class ConfirmStepBView(UpdateProcessView):
    form_class = ConfirmationForm

    def validate(self):
        if not self.process.B: 
            raise ValidationError

# Usage: 
flow.View(ConfirmStepAView)
flow.View(ConfirmStepBView)

如何编写一个动态生成这些类的工厂方法,这样我可以做这样的事情?

flow.View(ConfirmStepViewFactory('A'))
flow.View(ConfirmStepViewFactory('B'))
flow.View(ConfirmStepViewFactory('Something'))
flow.View(ConfirmStepViewFactory('Else'))

注意:我必须使用这种格式,因为我正在使用第三方库。

python
1个回答
1
投票

这是一种常见的模式。您可以利用python中的闭包来动态创建和返回您的类。

def make_ConfirmStepView(attribute):
    class ConfirmStepView(UpdateProcessView):
        form_class = ConfirmationForm

        def validate(self):
            if not getattr(self.process, attribute): 
                raise ValidationError

    return ConfirmStepView

flow.View(make_ConfirmStepView('A'))
flow.View(make_ConfirmStepView('B'))
flow.View(make_ConfirmStepView('Something'))
flow.View(make_ConfirmStepView('Else'))
© www.soinside.com 2019 - 2024. All rights reserved.