# \_\_init\_\_.py

### **1. Основное назначение `__init__.py`**

1. **Модуль пакета**
   * Любая папка, содержащая файл `__init__.py`, считается **пакетом**.
   * Без него Python не будет воспринимать папку как пакет (в старых версиях Python до 3.3 это было строго обязательно; сейчас опционально, но всё равно часто используется).
2. **Инициализация пакета**
   * В этом файле можно писать код, который должен выполняться при импорте пакета.
   * Можно импортировать подмодули, задавать переменные или константы пакета.

***

### **2. Примеры использования**

#### **Пример 1: Создание пакета**

Структура проекта:

```
my_package/
    __init__.py
    module1.py
    module2.py
```

Содержимое `__init__.py` может быть пустым:

```python
# my_package/__init__.py
```

Импорт пакета:

```python
import my_package.module1
```

***

#### **Пример 2: Инициализация при импорте**

Можно импортировать подмодули прямо в `__init__.py`, чтобы их было удобно использовать:

```python
# my_package/__init__.py
from .module1 import func1
from .module2 import func2
```

Теперь:

```python
from my_package import func1, func2
func1()
```

***

#### **Пример 3: Код и переменные пакета**

```python
# my_package/__init__.py
version = "1.0"
print("Пакет my_package загружен")
```

Импорт:

```python
import my_package
print(my_package.version)  # 1.0
```

* При этом при импорте выполнится `print("Пакет my_package загружен")`.

***

### **3. Применение в автотестах**

* **Структура тестов**

```
tests/
    __init__.py
    test_login.py
    test_registration.py
```

* Позволяет:
  * Импортировать тестовые модули как пакет: `from tests import test_login`.
  * Настроить глобальные фикстуры или константы пакета в `__init__.py`.
* **Page Object Model**

```
pages/
    __init__.py
    login_page.py
    home_page.py
```

* Можно импортировать все страницы сразу:

```python
from pages import login_page, home_page
```

***

💡 **Вывод:**

* `__init__.py` делает папку **пакетом Python**, позволяет инициализировать пакет, импортировать подмодули и задавать переменные.
* Особенно полезен для **структурирования автотестов, Page Object Model и повторного использования кода**.


---

# 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://kaze.gitbook.io/qa-theory/osnovy-programmirovaniya-na-python/__init__.py.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.
