Q:

Работа с базой данных в flask-security

Изучаю flask-security. В Quickstart есть такой вот код:
class UserRoles(db.Model):
    # Because peewee does not come with built-in many-to-many
    # relationships, we need this intermediary class to link
    # user to roles.
    user = ForeignKeyField(User, related_name='roles')
    role = ForeignKeyField(Role, related_name='users')
    name = property(lambda self: self.role.name)
    description = property(lambda self: self.role.description)

Никак не могу понять, что делают строки 
name = property(lambda self: self.role.name)
description = property(lambda self: self.role.description)

От куда берется функция property, да и вообще, что происходит в этих строках ?

A:

property - это стандартная функция python. Позволяет работать с атрибутом экземпляра класса, назначая различные действия на его установку, изменение, удаление. Подробнее в документации
В данном случае это просто эквивалент варианта с декоратором
class Foo(object):
    # для примера
    role = '123'

    @property
    def name(self):
        return self.role

>>> Foo().name
'123'

Просто не имело смысла расписывать полный вариант данной конструкции, а данное свойство является обычным синтаксическим сахаром для получения self.role.name

