определение класса внутри класса? - PullRequest
1 голос
/ 06 ноября 2010
class ItemForm(djangoforms.ModelForm):
    class Meta:
        model = Item
        exclude = ['added_by']

Я не могу понять, что делает этот кусок кода. Я понял, что ItemForm наследует Modelform, но затем определение класса внутри класса ??

Класс товара:

class Item(db.Model):
    name = db.StringProperty()
    quantity = db.IntegerProperty(default=1)
    target_price = db.FloatProperty()
    priority = db.StringProperty(default='Medium',choices=[
      'High', 'Medium', 'Low'])
    entry_time = db.DateTimeProperty(auto_now_add=True)
    added_by = db.UserProperty()

Ответы [ 3 ]

3 голосов
/ 06 ноября 2010

Это часть магии Джанго. Метакласс для ModelForm (среди других классов) ищет внутренний класс Meta и использует его для внесения различных изменений во внешний класс. Это одна из самых глубоких частей Python, с которой большинству людей никогда не придется иметь дело из первых рук.

1 голос
/ 06 ноября 2010

В Python вы можете определять классы внутри других классов как способ инкапсуляции внутреннего класса.То, как Django использует это, на самом деле весьма превосходно.

См. Эту ссылку для получения дополнительной информации: http://www.geekinterview.com/question_details/64739

0 голосов
/ 06 ноября 2010

Meta - это специальное определение класса.

В этом примере это простая модель наследования. ModelForm создает форму на основе класса Model, поэтому, давая определение класса классу ModelForm, она создает элементы формы в соответствии с определением связанного класса Model.

...