Какой лучший способ переопределить вложенные члены класса в Python? - PullRequest
6 голосов
/ 10 октября 2011

Мне нужно «переопределить» некоторые из вложенных членов базового класса, оставив при этом остальные нетронутыми.
Вот что я делаю:

class InternGenericForm(ModelForm):                
    class Meta:
        model = Intern
        exclude = ('last_achievement', 'program',)
        widgets = {
            'name': TextInput(attrs={'placeholder': 'Имя и фамилия' }),
        }

class InternApplicationForm(InternGenericForm):
    class Meta:
        # Boilerplate code that violates DRY
        model = InternGenericForm.Meta.model
        exclude = ('is_active',) + InternGenericForm.Meta.exclude
        widgets = InternGenericForm.Meta.widgets

На самом деле, я хочу InternApplicationForm.Meta быть точно подобно InternGenericForm.Meta, за исключением того, что его кортеж exclude должен содержать еще один элемент.

Какой более красивый способ сделать это в Python?
IЖаль, что мне не пришлось писать шаблонный код, такой как model = InternGenericForm.Meta.model, который также подвержен ошибкам.

1 Ответ

15 голосов
/ 10 октября 2011
class InternGenericForm(ModelForm):                
    class Meta:
        model = Intern
        exclude = ('last_achievement', 'program',)
        widgets = {
            'name': TextInput(attrs={'placeholder': 'Имя и фамилия' }),
        }

class InternApplicationForm(InternGenericForm):
    class Meta(InternGenericForm.Meta):
        exclude = ('is_active',) + InternGenericForm.Meta.exclude
...