什么是@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/