Как в общем случае применить переопределение функции для нескольких классов в python?

Я работаю над приложением Django, но похоже, что это просто вопрос о Python, не имеющий ничего специфического для Django. Я новичок в python, и мне сложно описать то, что я пытаюсь сделать, но проще показать, так что вот:

У меня есть один класс:

class SlideForm(ModelForm):

    class Meta:
        model = Slide

, который я подклассифицирую:

class HiddenSlideForm(SlideForm):
    def __init__(self, *args, **kwargs):
        super(HiddenSlideForm, self).__init__(*args, **kwargs)
        for name, field in self.fields.iteritems():
            field.widget = field.hidden_widget()
            field.required = False

, а затем у меня есть другой класс:

class DeckForm(ModelForm):     

    def __init__(self, *args, **kwargs):
        # do some stuff here
        return super(DeckForm, self).__init__(*args, **kwargs)

    class Meta:
        model = Deck
        # other stuff here  

, который я также подклассом:

class HiddenDeckForm(DeckForm):

    def __init__(self, *args, **kwargs):
        super(HiddenDeckForm, self).__init__(*args, **kwargs)
        for name, field in self.fields.iteritems():
            field.widget = field.hidden_widget()
            field.required = False

Обратите внимание, что подклассы имеют точно такой же код, кроме имен классов, и делают то же самое. Я пытался понять, какой лучший способ обобщить это, чтобы я мог сохранить его СУХИМ и легко использовать для других классов, и рассмотрел декораторы и / или множественное наследование - оба эти понятия для меня новые, но я продолжают путаться.

Помощь приветствуется!

(В качестве примечания, не стесняйтесь указывать на любые проблемы, которые вы видите в моем коде django :))

5
задан Ben Roberts 19 May 2011 в 01:04
поделиться