# property()

`property()` - это встроенная функция в Python, которая используется для создания свойств в классах. Свойства позволяют получать, устанавливать и удалять значения атрибутов класса через специальные методы.

**Назначение**:

* Создание свойств в классах для управления доступом к атрибутам.
* Инкапсуляция данных и добавление логики для получения, установки и удаления значений атрибутов.

**Возврат**:

* Возвращает объект свойства, который можно использовать как атрибут класса.

**Описание**:

* Принимает от одного до четырех аргументов: `fget` (функция для получения значения), `fset` (функция для установки значения), `fdel` (функция для удаления значения) и `doc` (строка документации).
* `fget` - обязательный аргумент, который определяет метод для получения значения свойства.
* `fset` и `fdel` - необязательные аргументы, определяющие методы для установки и удаления значения свойства соответственно.
* `doc` - необязательный аргумент, содержащий строку документации для свойства.

**Примеры**:

1. Создание простого свойства только для чтения
2. Создание свойства для чтения и записи
3. Создание свойства с методом удаления

{% tabs %}
{% tab title="1." %}

```python
class Person:
    def __init__(self, name):
        self._name = name

    @property
    def name(self):
        return self._name
```

{% endtab %}

{% tab title="2." %}

```python
class Rectangle:
    def __init__(self, width, height):
        self._width = width
        self._height = height

    @property
    def area(self):
        return self._width * self._height

    @area.setter
    def area(self, value):
        self._width = value / self._height
        self._height = value / self._width
```

{% endtab %}

{% tab title="3." %}

```python
class Person:
    def __init__(self, name, age):
        self._name = name
        self._age = age

    @property
    def age(self):
        return self._age

    @age.setter
    def age(self, value):
        if value < 0:
            raise ValueError("Age cannot be negative")
        self._age = value

    @age.deleter
    def age(self):
        del self._age
```

{% endtab %}
{% endtabs %}

**Использование**:

* Для инкапсуляции данных в объектно-ориентированном программировании, скрывая внутреннюю реализацию атрибутов и предоставляя контролируемый доступ к ним.
* Для добавления дополнительной логики при получении, установке или удалении значений атрибутов.
* Для валидации данных и обеспечения целостности объектов.
* Для создания виртуальных атрибутов, которые вычисляются динамически на основе других атрибутов.
* Для улучшения читаемости кода и соблюдения принципов объектно-ориентированного программирования.

Функция `property()` является важной частью реализации инкапсуляции данных и принципов объектно-ориентированного программирования в Python. Она позволяет создавать свойства, которые обеспечивают контролируемый доступ к атрибутам класса, и добавлять дополнительную логику для их обработки.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://bemind.gitbook.io/neural/python/vstroennye-funkcii-python/property.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
