Представьте себе следующее:
class Employee:
def __init__(self, first, last):
self.first = first
self.last = last
self.fullname = f'{first} {last}'
В результате:
>>> e = Employee('John', 'Smith')
>>> e.fullname
'John Smith'
>>> e.first = 'Pete'
>>> e.fullname
'John Smith'
, что означает, что полное имя не обновляется при изменении имени или фамилии.
Если вместо этого мы используем свойство:
class Employee:
def __init__(self, first, last):
self.first = first
self.last = last
@property
def fullname(self):
return f'{self.first} {self.last}'
Мы получим:
>>> e = Employee('John', 'Smith')
>>> e.fullname
'John Smith'
>>> e.first = 'Pete'
>>> e.fullname
'Pete Smith'
Как видите, полное имя будет обновляться всякий раз, когда обновляется имя или фамилия, и онине выйдет из синхронизации.