2016-11-21 81 views
-1

我想知道爲什麼我們要爲模型類的參數指定名稱,例如django中的CharField爲什麼爲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_lengthblank,並保留其他參數。

如果你看一下Field類(超CharField的)的__init__方法,你會發現許多的定義有關鍵字參數:

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_lengthblank因爲這就是你所要求的。

+0

感謝您的答覆。我現在明白了。 – saiyan

相關問題