python - Django 的@property 有什么作用?

标签 python django

什么是@property在 Django ?
我是这样理解的:@property是获取方法中值的类中方法的装饰器。
但是,据我了解,我可以像平常一样调用该方法,它会得到它。所以我不确定它到底做了什么。
来自 docs 的示例:

from django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    birth_date = models.DateField()

    def baby_boomer_status(self):
        "Returns the person's baby-boomer status."
        import datetime
        if self.birth_date < datetime.date(1945, 8, 1):
            return "Pre-boomer"
        elif self.birth_date < datetime.date(1965, 1, 1):
            return "Baby boomer"
        else:
            return "Post-boomer"

    @property
    def full_name(self):
        "Returns the person's full name."
        return '%s %s' % (self.first_name, self.last_name)
如果存在与不存在有什么区别?

最佳答案

如您所见,函数 full_name返回一个包含人员名字和姓氏的字符串。
什么@property装饰器确实是声明它可以像普通属性一样被访问。
这意味着您可以调用full_name就好像它是一个成员变量而不是一个函数,所以像这样:name = person.full_name代替name = person.full_name()你也可以像这样定义一个 setter 方法:

@full_name.setter
def full_name(self, value):
     names = value.split(' ')
     self.first_name = names[0]
     self.last_name = names[1]
使用这种方法,您可以像这样设置一个人的全名:
person.full_name = 'John Doe'
代替
person.set_full_name('John Doe')
附言上面的 setter 只是一个示例,因为它仅适用于由空格分隔的两个单词组成的名称。在现实生活中,您会使用更强大的功能。

关于python - Django 的@property 有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58558989/

相关文章:

python - 如果文本改变了 the 的大小并且 widget 改变了大小

python - 较大数的非不同质因数

django - 使用 Django 和 South 重命名应用程序

python - 在 Pycharm 中使用 config 文件夹运行 Django 项目

Django用户认证: django_auth_ldap. backend.LDAPBackend

python - Python 中函数如何返回取决于接收器数量的动态值?

javascript - 在 Python 中,您可以像在 JavaScript 中那样对字符串函数进行原型(prototype)设计吗?

python - 删除列表中的元素,直到到达 Python 中的第一个空元素

python - Django_tables2 : Dynamically hiding columns based on the request

python - React : NoReverseMatch: Reverse for 'password_reset_confirm' not found. 'password_reset_confirm' 不是有效的 View 函数或模式名称