Instance state через self та __init__
page є instance attribute: кожен PageObject отримує власний стан через __init__, а method читає його через self.
Команда друкує Page: checkout і assertion проходить.
__init__, self, page та принципи ООП →Відеобібліотека
Пошук у нотатках курсу Python мануфактура та спільних матеріалах з переходом на потрібну секунду.
page є instance attribute: кожен PageObject отримує власний стан через __init__, а method читає його через self.
Команда друкує Page: checkout і assertion проходить.
__init__, self, page та принципи ООП →Class method, який перевіряє вхідний object проти model schema і повертає model instance або піднімає ValidationError.
2. API автоматизація одразу правильно, MVC, pydantic →Загальноприйнята назва першого параметра instance method. Python передає bound instance неявно під час виклику obj.method(), але ім’я self саме по собі не є keyword.
__init__, self, page та принципи ООП →Створи два PageObject instances із різними page values і доведи assertions, що зміна local variable не змінює self.page іншого instance.
Обидва instances мають незалежні page attributes.
У method немає global state.
Автор може пояснити, чому obj.method() передає obj як перший argument.
Відкрийте implementation Locator.click() у встановленій версії Playwright.
Знайдіть frame/channel method, command name та передані options.
Запишіть, які перевірки виконує client, а які делегуються browser-side layer.
Короткий call path із назвами classes/methods і посиланням на встановлену версію package.
Окремий postfix template експериментально перетворює вираз на присвоєння змінній. Він корисний лише тоді, коли справді економить дії; якщо шаблон незручно визначає позицію курсора або працює не для всіх виразів, його краще спростити чи не використовувати. `⌥Enter` відкриває intention actions для поточного контексту. У меню можна рухатися клавішами й вибирати, наприклад, перейменування елемента. Перейменування через IDE змінює всі пов’язані входження, тому безпечніше за ручний пошук і заміну. `Refactor → Extract Method` (`⌘⌥M` у показаному keymap) переносить виділений фрагмент у новий метод. PyCharm визначає потрібні аргументи й можливі значення, що повертаються. У прикладі перевірки кнопки винесено в `check_manage_button`, після чого до викликів усередині методу додано `self`. Це спосіб прибрати дублювання на рівні поведінки, не переписуючи код вручну. Практичне зауваження з демонстрації: `to_have_text()` не варто вважати повною заміною перевірки видимості. Якщо видимість є окремою вимогою сценарію, її треба перевіряти явно.
`self` — явний параметр instance method, через який код звертається до конкретного екземпляра класу. `self.card` означає атрибут цього екземпляра, тоді як локальна змінна `card` живе лише у своїй функції або блоці видимості. Однакові назви технічно можливі, але збільшують когнітивне навантаження. Префікс `self.` одночасно потрібен Python для правильного доступу до instance attribute і показує читачеві, де зберігається стан.
Class name зазвичай є іменником в однині та пишеться з великої літери. `__init__` приймає початковий state, а `self.email` і `self.role` належать конкретному object instance. Method `is_admin()` розміщує перевірку ролі біля даних і не змушує кожен test повторювати `user.role == "admin"`.
Поліморфізм дозволяє однаковому interface мати різну реалізацію, зокрема через method override. Але одна назва для суттєво різних дій може приховувати code smell. У Python default/keyword arguments часто вирішують просту варіативність без overload hierarchy.
`BaseController` приймає base URL і JWT, формує спільні headers `Authorization` і `Content-Type: application/json`, виконує HTTP-запит і піднімає exception для неуспішного статусу. Методи `get`, `post` і `put` повторно використовують цю поведінку; `post` і `put` додатково приймають request body. Запити варто логувати, щоб під час падіння було видно method, endpoint і контекст виклику. Для `requests` таке logging додають явно; `HTTPX` має власний logging namespace, тому конкретна реалізація залежить від обраного client.
Коли логін повторився у двох тестах, його винесено у `login_user(page, email, password)`. Дані не хардкодяться всередині helper-функції: тест передає `Page`, email і пароль явно. Type hints допомагають IDE підказувати доступні операції та помічати неправильні аргументи ще до запуску. Так само через Extract Method створюється `open_home_page(page)`. Допоміжні функції розміщуються нижче тестів, щоб під час code review спочатку читалися сценарії, а вже потім технічні деталі.
Один метод класу може викликати інший через `self.get_name()` і використати повернене значення. Після створення екземпляра з обов’язковим аргументом викликається публічний метод, а внутрішні деталі залишаються в класі. Підсумкова модель: локальні змінні живуть у функції; атрибути екземпляра доступні методам через `self`; модульні значення доступні коду після їх оголошення. Подальша практика — брати конкретну задачу автоматизації, експериментувати з одним типом у короткому файлі, а потім переносити перевірений вираз у тест.