Определение свойства с помощью функции получения, но без установки, может быть очень полезно в определенных сценариях.Допустим, у вас есть модель, как показано ниже в Django;модель по сути является таблицей базы данных с записями, называемыми полями.Свойство hostname вычисляется из одного или нескольких полей в модели из базы данных.Это позволяет обойтись без другой записи в таблице базы данных, которая должна изменяться при каждом изменении соответствующих полей.
Истинным преимуществом использования свойства является вызов object.hostname()
против object.hostname
.Последний передается вместе с объектом автоматически, поэтому, когда мы идем в такое место, как шаблон jinja, мы можем вызвать object.hostname
, но вызов object.hostname()
вызовет ошибку.
Пример ниже - это модель виртуальной машины споле имени и пример кода jinja, где мы передали объект виртуальной машины.
# PYTHON CODE
class VirtualMachine(models.Model):
name = models.CharField(max_length=128, unique=True)
@property
def hostname(self):
return "{}-{}.{}".format(
gethostname().split('.')[0],
self.name,
settings.EFFICIENT_DOMAIN
)
# JINJA CODE
...start HTML...
Name: {{ object.name }}
# fails
Hostname: {{ object.hostname() }}
# passes
Hostname: {{ object.hostname }}
...end HTML...