python django为什么类方法可以像变量一样使用?

时间:2014-01-24 12:50:45

标签: python django

我在UserCreationForm中看到了这个:

def clean_username(self):
    # Since User.username is unique, this check is redundant,
    # but it sets a nicer error message than the ORM. See #13147.
    username = self.cleaned_data["username"]
    try:
        User._default_manager.get(username=username)
    except User.DoesNotExist:
        return username
    raise forms.ValidationError(self.error_messages['duplicate_username'])

此方法可以这种方式使用:

def register_me(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        uname = form.clean_username

请参阅上一行。该方法没有()...为什么???

1 个答案:

答案 0 :(得分:1)

这是因为python不是强类型的(所以你可以将任何类型的对象分配给任何变量)并且因为函数是第一类对象:你可以将它们分配给变量,就像任何普通对象一样。

在将* form.clean_username *分配给 uname 后的示例中,您可以使用 uname 变量,如下所示: uname()将与* form.clean_username()*相同,因为您已将 uname 分配给* form.clean_username *

引用的“runnable”