Геттеры и сеттеры
В объектно-ориентированных языках распространено использование геттеров и сеттеров для безопасной работы с приватными полями. Например, в C# для этого есть удобная конструкция
В Python геттер реализуется через декоратор
Оба метода должны иметь одинаковое название, по которому можно будет обращаться как к обычному атрибуту.
#классы #property
В объектно-ориентированных языках распространено использование геттеров и сеттеров для безопасной работы с приватными полями. Например, в C# для этого есть удобная конструкция
{ get; set; }.В Python геттер реализуется через декоратор
@property, а сеттер в виде @свойство.setter. В примере метод геттера называется age, поэтому декоратор сеттера – @age.setter.Оба метода должны иметь одинаковое название, по которому можно будет обращаться как к обычному атрибуту.
#классы #property
Дополнение про property
Важно отметить, что
Конструктор
Простыми словами, в примере
Кстати, можете посмотреть простейшую реализацию такого свойства в официальной документации.
#классы #property
Важно отметить, что
property – это класс, реализованный через протокол дескриптора. Его методы setter, getter, deleter и их использование в качестве декораторов – синтаксический сахар.Конструктор
property принимает на вход аргументы fget, fset, fdel, которые должны быть функциями. Они отвечают за получение, установку нового значения и удаление атрибута соответственно. Простыми словами, в примере
property прикрепляет функции get_age и set_age к атрибуту age. Также можно было реализовать условный delete_age, который отвечал бы за удаление атрибута.Кстати, можете посмотреть простейшую реализацию такого свойства в официальной документации.
#классы #property
Кэшированные атрибуты
Во встроенном пакете
Таким образом, при первом обращении к атрибуту производятся вычисления в методе, а при дальнейших берется уже кэшированное значение.
Подобное кэшеирование полезно в случаях, когда в методе производятся вычисления, которые нагружают систему и занимают много времени.
По сути,
#functools #cached_property
Во встроенном пакете
functools есть классный декоратор @cached_property, который позволяет кэшировать результат метода и загнать его в атрибут.Таким образом, при первом обращении к атрибуту производятся вычисления в методе, а при дальнейших берется уже кэшированное значение.
Подобное кэшеирование полезно в случаях, когда в методе производятся вычисления, которые нагружают систему и занимают много времени.
По сути,
@cached_property можно сравнить с комбинацией декораторов @property (про это был пост) и @functools.lru_cache (и про это тоже).#functools #cached_property
👍1
Геттеры и сеттеры
В объектно-ориентированных языках распространено использование геттеров и сеттеров для безопасной работы с приватными полями. Например, в C# для этого есть удобная конструкция
В Python геттер реализуется через декоратор
Оба метода должны иметь одинаковое название, по которому можно будет обращаться как к обычному атрибуту.
#классы #property
В объектно-ориентированных языках распространено использование геттеров и сеттеров для безопасной работы с приватными полями. Например, в C# для этого есть удобная конструкция
{ get; set; }.В Python геттер реализуется через декоратор
@property, а сеттер в виде @свойство.setter. В примере метод геттера называется age, поэтому декоратор сеттера – @age.setter.Оба метода должны иметь одинаковое название, по которому можно будет обращаться как к обычному атрибуту.
#классы #property
👍59❤1
Дополнение про property
Важно отметить, что
Конструктор
Простыми словами, в примере
Кстати, можете посмотреть простейшую реализацию такого свойства в официальной документации.
#классы #property
Важно отметить, что
property – это класс, реализованный через протокол дескриптора. Его методы setter, getter, deleter и их использование в качестве декораторов – синтаксический сахар.Конструктор
property принимает на вход аргументы fget, fset, fdel, которые должны быть функциями. Они отвечают за получение, установку нового значения и удаление атрибута соответственно. Простыми словами, в примере
property прикрепляет функции get_age и set_age к атрибуту age. Также можно было реализовать условный delete_age, который отвечал бы за удаление атрибута.Кстати, можете посмотреть простейшую реализацию такого свойства в официальной документации.
#классы #property
👍42🔥2❤1