# self

### **1. Что такое `self`**

* `self` — это **ссылка на текущий экземпляр класса**.
* Через `self` объекты могут **достучаться к атрибутам и методам класса**.
* В Python `self` **передаётся автоматически** при вызове метода, но его нужно **обозначить первым параметром метода**.

***

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

```python
class User:
    def __init__(self, name, age):
        self.name = name  # атрибут экземпляра
        self.age = age

    def greet(self):
        return f"Hello, {self.name}!"

# Создание объекта
user1 = User("Alice", 30)
print(user1.greet())  # "Hello, Alice!"
```

* Здесь `self.name` и `self.age` — атрибуты конкретного объекта `user1`.
* Метод `greet` использует `self`, чтобы обратиться к этим атрибутам.

***

### **3. Важные моменты**

1. **`self` обязательно в методах экземпляра**, но **не нужно передавать при вызове**:

```python
user1.greet()  # Python автоматически подставляет user1 в self
```

2. Можно использовать **любое имя вместо self**, но по стандарту используют именно `self`:

```python
class MyClass:
    def method(this, x):
        this.x = x
```

3. **self** нужен только для методов экземпляра, а **не для статических методов**:

```python
class MyClass:
    @staticmethod
    def static_method():
        print("No self here")
```

***

### **4. Применение в автоматизации тестирования**

* **Page Object Model**: `self` позволяет хранить элементы страницы как атрибуты и использовать их в методах:

```python
class LoginPage:
    def __init__(self, driver):
        self.driver = driver
        self.username_input = driver.find_element(...)
    
    def login(self, username, password):
        self.username_input.send_keys(username)
```

* **Тестовые данные и состояния объектов**: `self` хранит текущие значения атрибутов для проверки состояния теста.

***

💡 **Вывод:**

* `self` = ссылка на конкретный объект класса.
* Через `self` методы и атрибуты экземпляра **связываются с конкретным объектом**, что важно в ООП и автоматизации тестирования.


---

# 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/self.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.
