2015-02-14 3 views
0

я не знаю, есть ли какая-то разница между этими двумя Meta деклараций:Django мета декларации в моделях

class Car(models.Model): 
    #... 

    class Meta(object): # <------- (1) 
     #... 

    class Meta:   # <------- (2) 
     #... 

Какой из них правильный и предпочтительный? Это зависит от использования?

Я использую python 2 и 3 и Django 1.7+.

+0

Я никогда не видел первый пример 'Meta (object)' used. Откуда вы его взяли? – yuvi

+0

У меня есть исходный код, который использует python 2.7 и Django 1.7. Он использует первый, чтобы объявить 'verbose_name' и' verbose_name_plural'. Оно работает. – deepmax

ответ

2

Классов, которые не наследуют от всего называют старым стилем классов

class old_style: 
    pass 

Других классов, которые наследуют от объекта, называется нового стиль классы

class new_style(object): 
    pass 

классы, которые наследуют от новый- классы стиля также новы, потому что в конце они наследуют от объекта:

class new_style(object): 
    pass 

class new_style2(new_style): 
    pass 

В Python 3, все классы являются новые классы (наследование от объекта), поэтому в Python 3:

class e(object): 
    pass 

class d: 
    pass 

е == d

Вы можете прочитать больше о различиях/использований в этом question

+0

Итак, вы говорите, что оба они одинаковы в действии? Эта [официальная ссылка] (https://docs.djangoproject.com/en/1.7/ref/models/options/) использует старый стиль. – deepmax

+1

Классы нового стиля содержат некоторые методы/атрибуты bulit-in, но их медленнее создавать, классы старого стиля содержат только __doc__ и __module__, но они намного быстрее создают ---- Вы можете прочитать больше в вопросе I ' ve connected ---- Если вы используете python 3, тогда просто игнорируйте все это, поскольку классы старого стиля существуют только в python 2 –

Смежные вопросы