uz
Feedback
Python | Вопросы собесов

Python | Вопросы собесов

Kanalga Telegram’da o‘tish

📈 Telegram kanali Python | Вопросы собесов analitikasi

Python | Вопросы собесов (@python_easy_ru) Rus til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 13 106 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 9 745-o'rinni va Rossiya mintaqasida 50 714-o'rinni egallagan.

📊 Auditoriya ko‘rsatkichlari va dinamika

невідомо sanasidan buyon loyiha tez o‘sib, 13 106 obunachiga ega bo‘ldi.

09 Iyun, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni -53 ga, so‘nggi 24 soatda esa -3 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.

  • Tasdiqlash holati: Tasdiqlanmagan
  • Jalb etish (ER): Auditoriya o‘rtacha 8.62% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 5.62% ini tashkil etuvchi reaksiyalarni to‘playdi.
  • Post qamrovi: Har bir post o‘rtacha 1 129 marta ko‘riladi; birinchi sutkada odatda 737 ta ko‘rish yig‘iladi.
  • Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 4 ta reaksiya keladi.
  • Tematik yo‘nalishlar: Kontent ставь, модуль, строка, docker, alice kabi asosiy mavzularga jamlangan.

📝 Tavsif va kontent siyosati

Muallif resursni shaxsiy fikrni ifoda etish maydoni sifatida ta’riflaydi:
Cайт: easyoffer.ru Реклама: @easyoffer_adv ВП: @easyoffer_vp Тесты t.me/+20tRfhrwPpM4NDQy Задачи t.me/+nsl4meWmhfQwNDVi Вакансии t.me/+cXGKkrOY2-w3ZTky

Yuqori yangilanish chastotasi (oxirgi ma’lumot 10 Iyun, 2026 da olingan) sababli kanal doimo dolzarb va katta qamrovli bo‘lib qoladi. Analitika auditoriya kontent bilan faol hamkorlik qilishini, uni Texnologiyalar & Aralashmalar toifasidagi muhim ta’sir nuqtasiga aylantirishini ko‘rsatadi.

13 106
Obunachilar
-324 soatlar
-137 kunlar
-5330 kunlar
Postlar arxiv
1PS: Эффективное SEO-продвижение с результатами х8 Пройдите опрос и рассчитайте стоимость продвижения сайта с применением нов
1PS: Эффективное SEO-продвижение с результатами х8 Пройдите опрос и рассчитайте стоимость продвижения сайта с применением новых технологий. Полностью поменяли подход к SEO, чтобы вы увидели результат x8: Качественный трафик, гарантии в договоре, реклама в подарок! Узнать больше #реклама 1ps.ru О рекламодателе

🤔 Что такое mock? Это объект, который имитирует поведение реального объекта в контролируемом и предсказуемом виде. В контексте тестирования, особенно в Python, это используется для создания фиктивных объектов, которые замещают реальные компоненты системы во время выполнения тестов. 🚩Зачем нужен 🟠Изоляция тестов Позволяет тестировать компоненты системы независимо от других частей. 🟠Контроль над внешними зависимостями Можно моделировать ответы и поведение зависимостей, таких как базы данных или веб-сервисы. 🟠Ускорение тестов Тесты с mock-объектами выполняются быстрее, так как не требуют взаимодействия с реальными ресурсами. 🟠Тестирование ошибок Легко симулировать ошибки и исключения, которые сложно воспроизвести с реальными объектами. 🚩Основные возможности 🟠Создание mock-объектов Могут заменять любые объекты в коде. 🟠Настройка поведения Указание, какие значения должны возвращать mock-объекты. 🟠Отслеживание вызовов Возможность проверять, как и сколько раз были вызваны методы mock-объекта. 🟠Контекстные менеджеры и декораторы Упрощают замену объектов в тестах на mock. 🚩Пример использования Предположим, у нас есть функция, которая обращается к внешнему API:
import requests

def get_user_data(user_id):
    response = requests.get(f"https://api.example.com/users/{user_id}")
    return response.json()
Чтобы протестировать эту функцию без реальных запросов, можно использовать mock:
from unittest.mock import patch

@patch('requests.get')
def test_get_user_data(mock_get):
    mock_get.return_value.json.return_value = {"id": 1, "name": "John Doe"}
    
    result = get_user_data(1)
    
    assert result == {"id": 1, "name": "John Doe"}
    mock_get.assert_called_once_with("https://api.example.com/users/1")
🚩Основные методы и атрибуты 🟠return_value Устанавливает возвращаемое значение метода. 🟠side_effect Устанавливает последовательность возвращаемых значений или исключений. 🟠assert_called_with() Проверяет, что метод был вызван с определенными аргументами. 🟠assert_called_once_with() Проверяет, что метод был вызван ровно один раз с определенными аргументами. 🚩Пример с контекстным менеджером
import requests
from unittest.mock import patch

def get_status_code(url):
    response = requests.get(url)
    return response.status_code

def test_get_status_code():
    with patch('requests.get') as mock_get:
        mock_get.return_value.status_code = 200
        
        assert get_status_code("https://example.com") == 200
        mock_get.assert_called_once_with("https://example.com")
Ставь 👍 и забирай 📚 Базу знаний

Короче, ищем менторов — Middle и Senior Python-разработчиков Ищем в ШОРТКАТ — менторскую платформу от команды разработчиков и
Короче, ищем менторов — Middle и Senior Python-разработчиков Ищем в ШОРТКАТ — менторскую платформу от команды разработчиков из бигтеха. Мы помогаем найти крутую работу, апнуть грейд или сменить стек.  Что надо будет делать: проводить тестовые собесы → оценивать грейд → помогать разбираться в сложных темах. Что взамен: - От 40К за 5-7 часов работы в неделю - Доступ к обучению и комьюнити сильных менторов из Booking, Сбер, Oracle, Tinkoff - Возможность выступать на эфирах, куда уже приходят 500+ джавистов, и стать заметнее на рынке Заполняй форму — свяжемся и расскажем подробности ➡️ https://forms.gle/rFY9z9GKggqfgSS76 Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2VtzqvmeCGf

🤔 Зачем нужен метод super в классе? Метод super позволяет вызывать методы родительского класса в контексте текущего класса. Это удобно при переопределении методов для сохранения их базового поведения. Также super используется для инициализации атрибутов родительского класса. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Обучение на Frontend-разработчика. С нуля за 9 месяцев. На курсе вы получите все навыки, необходимые для старта в профессии Frontend-разработчика. Персональный наставник middle/senior уровня. 14 проектов, лайвкодинг, хакатоны, репетиции техсобеседования. Освоите JavaScript, React, TypeScript Официальный диплом и сертификат школы. Поддержка наставника по JS в течение 3-х месяцев после диплома. Гарантия трудоустройства. Если вы не устроитесь, вернём деньги. Это закреплено в договоре п. 6.14 С 9 по 30 ноября 2024 г. скидка 40% на все программы Result School Узнать больше #реклама 16+ result.school О рекламодателе

🤔 Что такое pytest? Это популярный фреймворк для тестирования на языке Python. Он используется для написания и выполнения тестов, чтобы гарантировать, что код работает правильно. 🚩Зачем нужен 🟠Проверка корректности кода Позволяет выявить ошибки и дефекты на ранних стадиях разработки 🟠Поддержка и рефакторинг Обеспечивает уверенность, что изменения в коде не приводят к новым ошибкам. 🟠Документация Тесты могут служить примером использования кода и его поведения. 🚩Как используется 🟠Написание тестов Тесты пишутся в виде функций, начинающихся с test_. 🟠Запуск тестов Тесты выполняются с помощью команды pytest в командной строке. 🟠Ассерты Используются стандартные утверждения (assert) для проверки условий. 🚩Основные возможности 🟠Автоматическое обнаружение тестов pytest автоматически находит тестовые функции, классы и файлы. 🟠Фикстуры: Позволяют определять подготовительный и завершающий код для тестов. 🟠Параметризация Позволяет запускать один и тот же тест с различными входными данными. 🟠Плагины Расширяют функциональность фреймворка, например, для генерации отчетов, интеграции с CI/CD системами. 🚩Пример теста с использованием
# test_sample.py
def test_addition():
    assert 1 + 1 == 2

def test_subtraction():
    assert 2 - 1 == 1
Запуск тестов:
pytest
🟠Фикстуры Фикстуры позволяют подготовить необходимые данные или состояния для тестов.
import pytest

@pytest.fixture
def sample_data():
    return {"key1": "value1", "key2": "value2"}

def test_sample_data(sample_data):
    assert sample_data["key1"] == "value1"
🟠Параметризация тестов Позволяет запускать один тест с разными наборами данных.
import pytest

@pytest.mark.parametrize("a, b, result", [
    (1, 2, 3),
    (2, 3, 5),
    (3, 5, 8)
])
def test_addition(a, b, result):
    assert a + b == result
Ставь 👍 и забирай 📚 Базу знаний

Прожарка резюме для Python-разработчиков в четверг Ребята из менторской программы ШОРТКАТ разберут на эфире реальные резюме и
Прожарка резюме для Python-разработчиков в четверг Ребята из менторской программы ШОРТКАТ разберут на эфире реальные резюме и подскажут, что улучшить, чтобы точно дойти до собеса. Когда: 28 ноября, в четверг, в 19:00 по мск Ревьюит резюме рекрутер с опытом работы в Яндексе и Т-Банке. ☑️ Если хотите закинуть своё резюме, подпишитесь на бота @shortcut_python_bot — резюме будут собирать там  ☑️ Если закидывать нечего, но хочется посмотреть со стороны — тоже подписывайтесь на бота @shortcut_python_bot. Там будет ссылка на трансляцию и запись после После эфира все получат памятку, как использовать ChatGPT для резюме. Ссылку пришлют, не поверите, тоже в боте @shortcut_python_bot  Короче, подпишитесь на бот, чтобы ничего не пропустить @shortcut_python_bot  Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2VtzqxRzP9H

🤔 Для чего нужен сериализатор? Сериализатор преобразует данные из одного формата в другой, например, из объектов в JSON или обратно. Он используется для передачи данных между системами, а также для хранения или передачи структурированных данных. В веб-разработке сериализаторы часто применяются для работы с API. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Помощь в трудоустройстве в IT-сфере! В России из-за дефицита айтишников запустили бесплатную программу по обучению IT-специал
+9
Помощь в трудоустройстве в IT-сфере! В России из-за дефицита айтишников запустили бесплатную программу по обучению IT-специалистов. Теперь любой желающий может попробовать себя в IT с полного нуля и начать обучение бесплатно! Узнайте про дальнейшее трудоустройство в ведущие IT-компании для восполнения кадрового дефицита. Для этого нужно: - Перейти по ссылке - Заполнить анкету и ответить на вопросы (занимает менее 3 минут) - На основании ваших ответов вы сразу узнаете, подходит ли вам сфера IT и сможете ли вы в ней работать Перейти на сайт #реклама 16+ urban-university.ru О рекламодателе

😎 База IT собеседований – твоё секретное оружие для успешного прохождения этапов отбора! Собеседования от реальных компаний: Сбер, Яндекс, ВТБ, Тинькофф, Озон, Wildberries и многие другие! 🏢 Мы собрали 230 собесов, чтобы ты мог подготовиться к интервью с уверенностью и успехом. 🎯 Присоединяйся к базе и прокачай свои шансы на успешное трудоустройство!

🤔 Что такое monkey patch? Monkey patching (буквально "заплатка обезьяны") в программировании — это техника, позволяющая динамически изменять или расширять код во время выполнения программы. В Python это означает изменение или дополнение методов, атрибутов или классов в модуле или библиотеке, даже если у вас нет прямого доступа к исходному коду. 🚩Зачем нужен monkey patching 🟠Исправление ошибок Быстрое исправление ошибок в сторонних библиотеках без необходимости изменения их исходного кода. 🟠Добавление функциональности Расширение возможностей сторонних библиотек. 🟠Изменение поведения Замена существующих функций или методов на свои собственные для изменения поведения программы. 🚩Пример monkey patching
import time

# Оригинальная функция
def original_sleep(seconds):
    time.sleep(seconds)
    print(f"Slept for {seconds} seconds")

# Monkey patching функции sleep
def patched_sleep(seconds):
    print(f"Patched! Should have slept for {seconds} seconds")

# Применение monkey patching
time.sleep = patched_sleep

# Примеры использования
time.sleep(3)  # Вывод: Patched! Should have slept for 3 seconds
🚩Недостатки Неявные изменения Изменения могут быть неочевидны другим разработчикам, что может привести к путанице и затруднениям в отладке. Совместимость Monkey patching может вызвать проблемы совместимости при обновлении библиотек или модулей. ➖Непредсказуемость Изменения в поведении программы могут быть трудно предсказуемыми и отлаживаемыми. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что знаешь про singleton? Singleton — это паттерн проектирования, который гарантирует создание только одного экземпляра класса. Его применяют для управления глобальными ресурсами, такими как настройки или подключение к базе данных. Однако он критикуется за сложность тестирования и возможные нарушения принципов SOLID. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Большая кладовая онлайн-курсов Stepik – незаменимый спутник для тех, кто работает удаленно и любит путешествовать, так как помогает учиться в любой точке мира. Это отличная альтернатива чтению книги и просмотру фильма: позволит вам скоротать время в дороге, осваивая полезный навык или подтягивая иностранный язык, особенно удобно это делать в мобильном приложении. У Stepik есть свой телеграм-канал, в котором они рассказывают об авторских курсах (как платных, так и бесплатных), а также публикует полезные статьи и ссылки. У них есть такие подборки курсов: - Разработка на Python - Дизайн и графика - Тестирование ПО - Работа с данными Подпишитесь на stepik_courses и найдите интересующий курс для себя! Подписаться #реклама 16+ О рекламодателе

🤔 Как еще мы можем гарантировать закрытие файла, если не через with? Использование оператора with является рекомендованным способом гарантированного закрытия файла, так как он автоматически управляет открытием и закрытием ресурса. Однако, если по какой-то причине вы не можете использовать with, можно гарантировать закрытие файла другими способами, такими как использование явного вызова метода close() в блоке finally. 🟠С использованием `try-finally` Открытие и закрытие файла с использованием блока try-finally гарантирует, что файл будет закрыт, даже если в блоке try произойдет исключение. В этом примере файл открывается в блоке try, и его содержимое читается. Независимо от того, происходит ли исключение в блоке try или нет, блок finally будет выполнен, и файл будет закрыт.
file = None
try:
    file = open('example.txt', 'r')
    content = file.read()
    print(content)
finally:
    if file:
        file.close()
🟠С использованием контекстного менеджера Вы можете создать свой собственный контекстный менеджер, используя классы, который будет управлять открытием и закрытием файла. Это более сложный подход, но он полезен для понимания внутренних механизмов.
class FileManager:
    def __init__(self, filename, mode):
        self.filename = filename
        self.mode = mode
        self.file = None
    
    def __enter__(self):
        self.file = open(self.filename, self.mode)
        return self.file
    
    def __exit__(self, exc_type, exc_value, traceback):
        if self.file:
            self.file.close()

# Примеры использования
file_manager = FileManager('example.txt', 'r')
try:
    file = file_manager.__enter__()
    content = file.read()
    print(content)
finally:
    file_manager.__exit__(None, None, None)
🟠С использованием декоратора Еще один способ — использование декоратора для автоматического управления открытием и закрытием файла.
from functools import wraps

def open_file(filename, mode):
    def decorator(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            file = open(filename, mode)
            try:
                result = func(file, *args, **kwargs)
            finally:
                file.close()
            return result
        return wrapper
    return decorator

@open_file('example.txt', 'r')
def read_file(f):
    return f.read()

# Примеры использования
print(read_file())
🟠С использованием менеджера контекста из `contextlib` Модуль contextlib предоставляет полезные утилиты для создания контекстных менеджеров. Одной из таких утилит является contextlib.contextmanager, которая позволяет создавать контекстные менеджеры с помощью генераторов.
from contextlib import contextmanager

@contextmanager
def open_file(filename, mode):
    file = open(filename, mode)
    try:
        yield file
    finally:
        file.close()

# Примеры использования
file_manager = open_file('example.txt', 'r')
file = file_manager.__enter__()
try:
    content = file.read()
    print(content)
finally:
    file_manager.__exit__(None, None, None)
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что знаешь про ORM? ORM (Object-Relational Mapping) — это технология, которая позволяет работать с реляционными базами данных через объектно-ориентированные модели. Она автоматически преобразует объекты в SQL-запросы и обратно, упрощая работу с данными. Популярные ORM включают Hibernate, SQLAlchemy и Django ORM. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Сотрудничество с дизайнерами и архитекторами. LaRedoute Приглашаем дизайнеров интерьера и архитекторов к сотрудничеству. Даем
Сотрудничество с дизайнерами и архитекторами. LaRedoute Приглашаем дизайнеров интерьера и архитекторов к сотрудничеству. Даем скидку до 35% на товары и агентское вознаграждение до 10%.🏠 Скидки для ваших клиентов 💰 Поможем с подготовкой КП 🗒 Получить предложение #реклама laredoute.ru О рекламодателе

🤔 Геттеры и сеттеры, property атрибуты? Используются для контроля доступа к атрибутам класса. Они позволяют вам добавлять логику при получении (геттер) и изменении (сеттер) значений атрибутов. В Python эти методы можно реализовать с помощью функции property, которая упрощает создание геттеров и сеттеров, делая код более читабельным и идиоматичным. 🚩Геттеры и сеттеры Геттер — это метод, который возвращает значение атрибута, а сеттер — метод, который устанавливает значение атрибута. Пример без использования property
class MyClass:
    def __init__(self, value):
        self._value = value  # Приватный атрибут

    def get_value(self):
        return self._value

    def set_value(self, value):
        if value >= 0:
            self._value = value
        else:
            raise ValueError("Value must be non-negative")

# Примеры использования
obj = MyClass(10)
print(obj.get_value())  # Вывод: 10

obj.set_value(20)
print(obj.get_value())  # Вывод: 20

try:
    obj.set_value(-10)  # Пример вызова исключения
except ValueError as e:
    print(e)  # Вывод: Value must be non-negative
🚩`property` атрибуты Можно использовать функцию property, чтобы избежать явных вызовов геттеров и сеттеров и сделать код более естественным и читаемым. property позволяет определить методы доступа как атрибуты. Пример с использованием property
class MyClass:
    def __init__(self, value):
        self._value = value

    @property
    def value(self):
        return self._value

    @value.setter
    def value(self, value):
        if value >= 0:
            self._value = value
        else:
            raise ValueError("Value must be non-negative")

# Примеры использования
obj = MyClass(10)
print(obj.value)  # Вывод: 10 (используется геттер)

obj.value = 20
print(obj.value)  # Вывод: 20 (используется сеттер)

try:
    obj.value = -10  # Пример вызова исключения через сеттер
except ValueError as e:
    print(e)  # Вывод: Value must be non-negative
🚩Плюсы Инкапсуляция Позволяет скрыть реализацию и управлять доступом к данным через методы, что делает код более безопасным и гибким. ➕Читабельность Код выглядит как работа с обычными атрибутами, а не методами, что упрощает его понимание. ➕Контроль Легко добавить валидацию или логику при установке или получении значений. 🚩Полный пример с геттером, сеттером и делетером Также можно использовать декоратор @property для создания делетера (удаления атрибута).
class MyClass:
    def __init__(self, value):
        self._value = value

    @property
    def value(self):
        return self._value

    @value.setter
    def value(self, value):
        if value >= 0:
            self._value = value
        else:
            raise ValueError("Value must be non-negative")

    @value.deleter
    def value(self):
        del self._value

# Примеры использования
obj = MyClass(10)
print(obj.value)  # Вывод: 10

obj.value = 20
print(obj.value)  # Вывод: 20

del obj.value
try:
    print(obj.value)  # Ошибка, так как атрибут удален
except AttributeError as e:
    print(e)  # Вывод: 'MyClass' object has no attribute '_value'
Ставь 👍 и забирай 📚 Базу знаний

🤔 Какие основные HTTP методы знаешь? Основные методы: GET для получения данных, POST для отправки данных, PUT для обновления или создания ресурса, DELETE для удаления. Также используются PATCH для частичного обновления, HEAD для получения заголовков и OPTIONS для определения доступных методов. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Скидка 15% на корпоративное такси. Яндекс Go для бизнеса Скидка 15% на первые три месяца. Возврат НДС до 20% на все рабочие п
Скидка 15% на корпоративное такси. Яндекс Go для бизнеса Скидка 15% на первые три месяца. Возврат НДС до 20% на все рабочие поездки. Контроль маршрутов и расходов в одном кабинете. Быстрая подача авто от 5 минут. Удобное онлайн-подключение без визита в офис. Узнать больше #реклама business.go.yandex О рекламодателе Реклама на Яндексе

🤔 Чем отличается атрибут класса от атрибута объекта? Различаются по своему назначению и области видимости. Понимание этих различий важно для правильного проектирования классов и управления данными. 🚩Атрибуты класса Являются общими для всех экземпляров класса. Они определяются внутри класса, но вне любого метода. Эти атрибуты могут быть доступны и изменены как через сам класс, так и через любой его экземпляр.
class MyClass:
    class_attribute = 42  # Атрибут класса

# Доступ к атрибуту класса
print(MyClass.class_attribute)  # Вывод: 42

# Создание экземпляров
obj1 = MyClass()
obj2 = MyClass()

# Доступ к атрибуту класса через экземпляры
print(obj1.class_attribute)  # Вывод: 42
print(obj2.class_attribute)  # Вывод: 42

# Изменение атрибута класса
MyClass.class_attribute = 100
print(obj1.class_attribute)  # Вывод: 100
print(obj2.class_attribute)  # Вывод: 100
🚩Атрибуты объекта (экземпляра) Уникальны для каждого экземпляра класса. Они определяются внутри методов класса, обычно в методе __init__, и относятся к конкретному экземпляру.
class MyClass:
    def __init__(self, value):
        self.instance_attribute = value  # Атрибут объекта

# Создание экземпляров
obj1 = MyClass(10)
obj2 = MyClass(20)

# Доступ к атрибутам объекта
print(obj1.instance_attribute)  # Вывод: 10
print(obj2.instance_attribute)  # Вывод: 20

# Изменение атрибутов объекта
obj1.instance_attribute = 15
print(obj1.instance_attribute)  # Вывод: 15
print(obj2.instance_attribute)  # Вывод: 20
🚩Ключевые различия 🟠Область видимости и доступ Атрибуты класса видны и доступны для всех экземпляров класса. Атрибуты объекта видны и доступны только для конкретного экземпляра. 🟠Инициализация и использование Атрибуты класса инициализируются при определении класса и общие для всех экземпляров. Атрибуты объекта инициализируются в методе __init__ и уникальны для каждого экземпляра. 🟠Изменение значений Изменение атрибута класса через класс изменяет его для всех экземпляров. Изменение атрибута объекта влияет только на конкретный экземпляр. 🚩Пример различий
class MyClass:
    class_attribute = 'class value'

    def __init__(self, value):
        self.instance_attribute = value

# Создание экземпляров
obj1 = MyClass('instance value 1')
obj2 = MyClass('instance value 2')

# Доступ к атрибутам класса и объекта
print(MyClass.class_attribute)      # Вывод: class value
print(obj1.class_attribute)         # Вывод: class value
print(obj2.class_attribute)         # Вывод: class value

print(obj1.instance_attribute)      # Вывод: instance value 1
print(obj2.instance_attribute)      # Вывод: instance value 2

# Изменение атрибута класса через класс
MyClass.class_attribute = 'new class value'
print(obj1.class_attribute)         # Вывод: new class value
print(obj2.class_attribute)         # Вывод: new class value

# Изменение атрибута объекта
obj1.instance_attribute = 'new instance value 1'
print(obj1.instance_attribute)      # Вывод: new instance value 1
print(obj2.instance_attribute)      # Вывод: instance value 2
Ставь 👍 и забирай 📚 Базу знаний