@property
Основная идея - создания буферных зон.
Чтобы скрыть от пользователя то, что должно быть скрыто. Либо для того чтобы создать интерфейс взаимодействия - его можно будет с легкостью видоизменять в дальнейшем.
class Person:
def __init__(self, name):
self._name = name
def get_name(self):
print("From get_name: ")
return self._name
def set_name(self, name):
print("From set_name: ")
self._name = name
name = property(fget=get_name, fset=set_name)
# вариант 2
# name = property()
# name.setter(set_name)
# name.getter(get_name)
# вариант 3
# name = property(get_name)
# name.setter(set_name)
p = Person("Dima")
# p.__dict__
# {'name': 'Dima'}
p.name
# From get_name:
# 'Dima'
p.name = "Ivan"
# From set_name:
# 'Ivan'
1234567891011121314151617181920212223242526272829303132333435При использовании декоратора получится следующее
[!info] Для чего можно использовать @property
методы класса со свойством только для чтения
метод класса для вычисляемых свойств (например, для конкатенации свойств класса и его вывода)
Самое простое - это создать функцию с декоратором @property но только геттер (без сеттера не будет возможности записи значения).
Пример вычисляемого свойства:
Вычисляемые свойства имеет смысл использовать тогда, когда нет смысла хранить состояния (они будут считаться каждый раз при вызове)
Last updated
Was this helpful?