> For the complete documentation index, see [llms.txt](https://kaze.gitbook.io/qa-theory/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kaze.gitbook.io/qa-theory/osnovy-programmirovaniya-na-python/self.md).

# 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` методы и атрибуты экземпляра **связываются с конкретным объектом**, что важно в ООП и автоматизации тестирования.
