Python | Вопросы собесов
Cайт: easyoffer.ru Реклама: @easyoffer_adv ВП: @easyoffer_vp Тесты t.me/+20tRfhrwPpM4NDQy Задачи t.me/+nsl4meWmhfQwNDVi Вакансии t.me/+cXGKkrOY2-w3ZTky
Ko'proq ko'rsatish📈 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.
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")
Ставь 👍 и забирай 📚 Базу знаний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
Ставь 👍 и забирай 📚 Базу знаний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 может вызвать проблемы совместимости при обновлении библиотек или модулей.
➖Непредсказуемость
Изменения в поведении программы могут быть трудно предсказуемыми и отлаживаемыми.
Ставь 👍 и забирай 📚 Базу знаний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)
Ставь 👍 и забирай 📚 Базу знаний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'
Ставь 👍 и забирай 📚 Базу знаний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
Ставь 👍 и забирай 📚 Базу знаний
Endi mavjud! Telegram Tadqiqoti 2025 — yilning asosiy insaytlari 
