2016-11-21 3 views
-1

Я хочу знать, почему мы указываем имена параметров для классов моделей, таких как CharField в django.like, например, это пример.Почему названные аргументы для классов модели django

first_name = models.CharField(max_length=40, blank=True) 

почему не

first_name = models.CharField(40, True) 

В Java мы называем new charField(40,true) как this.If они по умолчанию аргументы мы задающие их в определении конструктора (в Java).

Почему мы пишем здесь.пожалуйста, объясните.

+0

В частности, Python не имеет перегрузки методов, как это делает Java, поэтому вы не можете иметь несколько версий одного и того же метода с разными аргументами. Поскольку 'max_length' и' blank' не являются первыми двумя позиционными аргументами, вам нужно будет использовать 'models.CharField (None, None, False, 40, False, True)', которые должны явно сопоставлять каждое значение по умолчанию для предшествующие позиционные аргументы. Вы можете понять, почему ключевые слова являются предпочтительными. – knbk

ответ

1

Что вы видите в java, называется positional arguments, где аргументы всегда в определенном порядке. Однако Python поддерживает два типа аргументов: positional arguments and keyword arguments.

Красота аргументов ключевого слова заключается в том, что при использовании функции вам не нужно беспокоиться о определении значений для всех аргументов, используемых в методе (или конструкторе класса).

Вы можете использовать только identifier, например. в вашем случае max_length и blank и оставить оставшиеся аргументы такими, какие они есть.

Если вы посмотрите на __init__ способе Field класса (суперкласса CharField), вы найдете ряд ключевых аргументов, определенных там:

def __init__(self, verbose_name=None, name=None, primary_key=False, 
     max_length=None, unique=False, blank=False, null=False, 
     db_index=False, rel=None, default=NOT_PROVIDED, editable=True, 
     serialize=True, unique_for_date=None, unique_for_month=None, 
     unique_for_year=None, choices=None, help_text='', db_column=None, 
     db_tablespace=None, auto_created=False, validators=[], 
     error_messages=None): 

Из них, вы только что определили max_length и blank, потому что это то, что вам нужно.

+0

спасибо за ответ. Я понял сейчас. – saiyan

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