为什么变量给我一个 TypeError 而函数却没有?

Why does the variable give me a TypeError but the function doesn't?

我正在尝试 运行 以下代码,但“full_name” 给我以下错误。

TypeError:+ 不支持的操作数类型:'CharField' 和 'str'

from django.db import models

class user(models.Model):
    first_name = models.CharField(max_length=200)
    last_name = models.CharField(max_length=200)

    full_name = first_name + ' ' + last_name

    def __str__(self):
        return self.full_name

当我将“full_name”从变量更改为函数时,TypeError 消失,我的代码工作正常。

from django.db import models

class user(models.Model):
    first_name = models.CharField(max_length=200)
    last_name = models.CharField(max_length=200)
    
    def full_name(self):
        return self.first_name + ' ' + self.last_name

    def __str__(self):
        return self.full_name()

为什么变量给我一个 TypeError 而函数却没有?他们做的不一样吗?

它给出错误,因为full_name实际上是用户class中的一个变量。但是函数正在返回一个字符串。 Class 用户从未真正运行过,所以你不能定义一个不子class django.models.

的变量

class 级别的语句在启动时进行评估。调用方法时评估方法中的语句。

在第一个例子中,表达式在启动时计算;针对 class 属性值。实际上,您正在执行 models.CharField(max_length=200) + ' ' + models.CharField(max_length=200),但您不能将 CharField 与字符串连接起来。

在第二个例子中,表达式是在实例上调用方法时执行的;针对两个字段的 values,它们都是字符串。