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