Декоратор @property
Используйте property для геттеров, сеттеров и методов удаления.
«Декоратор @property» — бесплатный урок Python Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.
Введение
Зачем нужен @property
class Circle:
def __init__(self, r): self._r = r
@property
def radius(self): return self._r
c = Circle(5)
print(c.radius) # no ()Вычисляемые свойства
import math
class Circle:
def __init__(self, r): self._r = r
@property
def area(self): return math.pi * self._r**2
c = Circle(5)
print(round(c.area, 2))Сеттер свойства
class Circle:
def __init__(self, r): self._r = r
@property
def radius(self): return self._r
@radius.setter
def radius(self, val):
if val <= 0: raise ValueError('radius must be positive')
self._r = val
c = Circle(5)
c.radius = 10
print(c.radius)Удаление свойства
class User:
def __init__(self, name): self._name = name
@property
def name(self): return self._name
@name.deleter
def name(self): del self._name
u = User('Alice')
del u.name
print(hasattr(u, '_name'))Свойство только для чтения
class Const:
def __init__(self, v): self._v = v
@property
def value(self): return self._v
c = Const(42)
print(c.value)
try: c.value = 99
except AttributeError as e: print(e)Свойство с проверкой
class BoundedInt:
def __init__(self, lo, hi): self.lo,self.hi=lo,hi; self._v=lo
@property
def value(self): return self._v
@value.setter
def value(self, v):
if not self.lo <= v <= self.hi:
raise ValueError(f'{v} out of [{self.lo},{self.hi}]')
self._v = v
b = BoundedInt(0, 10)
b.value = 5
print(b.value)Кэширование с помощью property
class Expensive:
_cache = None
@property
def result(self):
if self._cache is None:
self._cache = sum(range(1000))
return self._cache
e = Expensive()
print(e.result)
print(e.result)cached_property (Python 3.8+)
from functools import cached_property
import math
class Circle:
def __init__(self, r): self.r = r
@cached_property
def area(self): return math.pi * self.r**2
c = Circle(5)
print(round(c.area, 2))Свойство и __slots__
class Point:
__slots__ = ('_x', '_y')
def __init__(self, x, y): self._x,self._y=x,y
@property
def x(self): return self._x
p = Point(1, 2)
print(p.x)Когда использовать @property
# Before: class Person:
# def __init__(self, age): self.age = age
# After: add validation without changing caller code
class Person:
def __init__(self, age): self.age = age
@property
def age(self): return self._age
@age.setter
def age(self, v):
if v < 0: raise ValueError('negative age')
self._age = v
p = Person(30)
print(p.age)Быстрая проверка
Итоги
Продолжайте
Часто задаваемые вопросы
Урок «Декоратор @property» бесплатный?
Да — полный текст урока «Декоратор @property» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.
Чему я научусь в уроке «Декоратор @property»?
Используйте property для геттеров, сеттеров и методов удаления. Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Python Academy?
Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Декоратор @property»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Python Academy?
Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Функции как объекты первого класса
- Написание пользовательских декораторов
- Декоратор @property
- @classmethod и @staticmethod