> For the complete documentation index, see [llms.txt](https://bemind.gitbook.io/neural/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bemind.gitbook.io/neural/python/vstroennye-funkcii-python/property.md).

# 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. Она позволяет создавать свойства, которые обеспечивают контролируемый доступ к атрибутам класса, и добавлять дополнительную логику для их обработки.
