#python #django #forms
#python #django #формы
Вопрос:
У меня есть следующая форма:
class MyForm(forms.Form):
class MyField(forms.CharField):
def __init__(self, *args, **kwargs):
kwargs.setdefault('max_length', 320)
super(self.__class__, self).__init__(*args, **kwargs)
sms_eng = MyField(label=_('Text for SMS'))
Что меня беспокоит, так это то, что я не могу вызвать super, как обычно:
super(MyForm.MyField, self).__init__(*args, **kwargs)
Рекомендуется ли определять поля внутри форм? Где еще я должен определить поля, которые используются только в одной форме? Каковы недостатки super(self.__class__, self)
в отличие от super(A.B, self)
?
Ответ №1:
Определение класса внутри класса очень редко бывает полезным в Python в целом — это ничего не даст, и внутренний класс не получает никакого специального доступа к внешнему классу, как, скажем, в Java.
Просто поместите определение поля перед классом form и используйте его как обычно.
Кроме того, вы никогда не должны использовать self.__class__
внутри суперзвонка. Это всегда относится к конкретному классу, а не к классу на этом уровне иерархии, поэтому, вероятно, приведет к бесконечному циклу, если ваш класс когда-либо будет подклассирован по очереди.