Python | Вопросы собесов
Cайт: easyoffer.ru Реклама: @easyoffer_adv ВП: @easyoffer_vp Тесты t.me/+20tRfhrwPpM4NDQy Задачи t.me/+nsl4meWmhfQwNDVi Вакансии t.me/+cXGKkrOY2-w3ZTky
Show more📈 Analytical overview of Telegram channel Python | Вопросы собесов
Channel Python | Вопросы собесов (@python_easy_ru) in the Russian language segment is an active participant. Currently, the community unites 13 106 subscribers, ranking 9 745 in the Technologies & Applications category and 50 714 in the Russia region.
📊 Audience metrics and dynamics
Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 13 106 subscribers.
According to the latest data from 09 June, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -53 over the last 30 days and by -3 over the last 24 hours, overall reach remains high.
- Verification status: Not verified
- Engagement rate (ER): The average audience engagement rate is 8.62%. Within the first 24 hours after publication, content typically collects 5.62% reactions from the total number of subscribers.
- Post reach: On average, each post receives 1 129 views. Within the first day, a publication typically gains 737 views.
- Reactions and interaction: The audience actively supports content: the average number of reactions per post is 4.
- Thematic interests: Content is focused on key topics such as ставь, модуль, строка, docker, alice.
📝 Description and content policy
The author describes the resource as a platform for expressing subjective opinions:
“Cайт: easyoffer.ru
Реклама: @easyoffer_adv
ВП: @easyoffer_vp
Тесты t.me/+20tRfhrwPpM4NDQy
Задачи t.me/+nsl4meWmhfQwNDVi
Вакансии t.me/+cXGKkrOY2-w3ZTky”
Thanks to the high frequency of updates (latest data received on 10 June, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.
bool() на объекте или объект используется в контексте, где требуется логическое значение (например, в условиях if), вызывается метод __bool__. Если метод __bool__ не определен, Python использует метод __len__: объект считается ложным (False), если его длина равна нулю, и истинным (True) в противном случае.
🚩Зачем нужен
Метод __bool__ позволяет вам определять, что будет считаться истинным или ложным для объектов вашего класса. Это может быть полезно в различных ситуациях, например, для проверки пустых контейнеров, валидных состояний объектов и т.д.
🚩Как использовать
Для того чтобы использовать метод __bool__, нужно его определить в своем классе. Метод должен возвращать либо True, либо False. В этом примере метод __bool__ проверяет значение атрибута value. Если value имеет значение, которое считается ложным (например, 0 или None), метод возвращает False. В противном случае, он возвращает True.
class MyClass:
def __init__(self, value):
self.value = value
def __bool__(self):
return bool(self.value)
# Примеры использования
obj1 = MyClass(0)
obj2 = MyClass(10)
print(bool(obj1)) # Вывод: False
print(bool(obj2)) # Вывод: True
if obj1:
print("obj1 is True")
else:
print("obj1 is False") # Этот блок выполнится
if obj2:
print("obj2 is True") # Этот блок выполнится
else:
print("obj2 is False")
🚩Пример более сложного использования
Допустим, у вас есть класс Box, который содержит предметы, и вы хотите, чтобы пустая коробка считалась ложной, а коробка с предметами — истинной.
class Box:
def __init__(self, items):
self.items = items
def __bool__(self):
return bool(self.items)
# Примеры использования
empty_box = Box([])
full_box = Box(['item1', 'item2'])
print(bool(empty_box)) # Вывод: False
print(bool(full_box)) # Вывод: True
if empty_box:
print("The box is not empty")
else:
print("The box is empty") # Этот блок выполнится
if full_box:
print("The box is not empty") # Этот блок выполнится
else:
print("The box is empty")
Ставь 👍 и забирай 📚 Базу знанийclass Vector:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, other):
return Vector(self.x + other.x, self.y + other.y)
def __repr__(self):
return f"Vector({self.x}, {self.y})"
v1 = Vector(1, 2)
v2 = Vector(3, 4)
print(v1 + v2) # Вывод: Vector(4, 6)
🟠Метод `__mul__`
Этот метод отвечает за операцию умножения. Его можно использовать, чтобы определить, как объекты вашего класса будут вести себя при использовании оператора *.
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
def __mul__(self, scalar):
return Vector(self.x * scalar, self.y * scalar)
def __repr__(self):
return f"Vector({self.x}, {self.y})"
v = Vector(1, 2)
print(v * 3) # Вывод: Vector(3, 6)
🟠Метод `__sub__`
Этот метод отвечает за операцию вычитания. Он позволяет вам определить поведение объектов при использовании оператора -.
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
def __sub__(self, other):
return Vector(self.x - other.x, self.y - other.y)
def __repr__(self):
return f"Vector({self.x}, {self.y})"
v1 = Vector(5, 7)
v2 = Vector(2, 3)
print(v1 - v2) # Вывод: Vector(3, 4)
🟠Метод `__truediv__`
Этот метод отвечает за операцию деления. Он позволяет определить, как объекты вашего класса будут вести себя при использовании оператора /.
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
def __truediv__(self, scalar):
return Vector(self.x / scalar, self.y / scalar)
def __repr__(self):
return f"Vector({self.x}, {self.y})"
v = Vector(8, 4)
print(v / 2) # Вывод: Vector(4.0, 2.0)
Ставь 👍 и забирай 📚 Базу знанийMock
from unittest.mock import Mock
# Создание мок-объекта
mock = Mock()
# Настройка мок-объекта
mock.some_method.return_value = "Mocked Result"
# Вызов метода и проверка результата
result = mock.some_method()
print(result) # Вывод: Mocked Result
Использование patch для замены объектов
import unittest
from unittest.mock import patch
# Пример функции, которая вызывает внешний API
def fetch_data():
import requests
response = requests.get("http://example.com/api/data")
return response.json()
# Тестирование функции с использованием patch
class TestFetchData(unittest.TestCase):
@patch('requests.get')
def test_fetch_data(self, mock_get):
# Настройка мок-ответа
mock_get.return_value.json.return_value = {"key": "value"}
# Вызов тестируемой функции
result = fetch_data()
# Проверка результата
self.assertEqual(result, {"key": "value"})
mock_get.assert_called_once_with("http://example.com/api/data")
if __name__ == '__main__':
unittest.main()
Использование MagicMock
from unittest.mock import MagicMock
# Создание объекта MagicMock
mock = MagicMock()
# Настройка возвращаемого значения для магического метода __str__
mock.__str__.return_value = "MagicMocked String"
print(str(mock)) # Вывод: MagicMocked String
Ставь 👍 и забирай 📚 Базу знанийdef add(a, b):
return a + b
2⃣Написание юнит-теста
import unittest
from my_module import add # Импортируем тестируемую функцию из модуля
class TestAddFunction(unittest.TestCase):
def test_add_positive_numbers(self):
self.assertEqual(add(2, 3), 5)
def test_add_negative_numbers(self):
self.assertEqual(add(-1, -1), -2)
def test_add_zero(self):
self.assertEqual(add(0, 0), 0)
if __name__ == '__main__':
unittest.main()
3⃣Запуск юнит-тестов
python test_add.py
Ставь 👍 и забирай 📚 Базу знанийclass Dog:
def bark(self):
return "Woof!"
# Оригинальное поведение
dog = Dog()
print(dog.bark()) # Вывод: Woof!
# Применение monkey patch
def new_bark(self):
return "Woof! Woof!"
Dog.bark = new_bark
# Измененное поведение
print(dog.bark()) # Вывод: Woof! Woof!
🟠Пример использования monkey patch для исправления ошибки
Допустим, у нас есть модуль math_operations.py с функцией, содержащей ошибку:
# math_operations.py
def add(a, b):
return a - b # Ошибка: должно быть сложение, а не вычитание
Мы можем использовать monkey patch, чтобы исправить эту ошибку, не изменяя исходный код:
import math_operations
def corrected_add(a, b):
return a + b
# Применение monkey patch
math_operations.add = corrected_add
# Теперь функция add работает правильно
print(math_operations.add(2, 3)) # Вывод: 5
🟠Использование monkey patch для расширения функциональности
Мы также можем использовать monkey patch для добавления новых методов в существующие классы:
class Cat:
def meow(self):
return "Meow!"
# Оригинальное поведение
cat = Cat()
print(cat.meow()) # Вывод: Meow!
# Применение monkey patch
def purr(self):
return "Purr..."
Cat.purr = purr
# Расширенное поведение
print(cat.purr()) # Вывод: Purr...
🚩Плюсы
➕Быстрое исправление багов без изменения исходного кода.
➕Возможность добавления функциональности к сторонним библиотекам.
➕Гибкость и мощь изменения поведения кода во время выполнения.
🚩Минусы
➖Может сделать код менее читаемым и более сложным для понимания.
➖Возможность возникновения конфликтов, если несколько частей кода пытаются изменить одно и то же поведение.
➖Трудности с поддержкой и отладкой кода, так как поведение может изменяться непредсказуемо.
Ставь 👍 и забирай 📚 Базу знанийopen(), которая возвращает объект файла. open() принимает два основных аргумента:
- Имя файла (путь к файлу).
- Режим открытия файла (например, чтение, запись, добавление и т.д.).
Примеры режимов:
- 'r': Открытие для чтения (по умолчанию).
- 'w': Открытие для записи (содержимое файла удаляется).
- 'a': Открытие для добавления (данные добавляются в конец файла).
- 'b': Бинарный режим (например, 'rb' или 'wb').
- '+': Открытие для чтения и записи (например, 'r+' или 'w+').
file = open('example.txt', 'r')
2⃣Чтение из файла
Для чтения данных из файла используются методы read(), readline() и readlines().
with open('example.txt', 'r') as file:
content = file.read()
print(content)
Пример чтения файла построчно:
with open('example.txt', 'r') as file:
for line in file:
print(line.strip())
3⃣Запись в файл
Для записи данных в файл используются методы write() и writelines().
with open('example.txt', 'w') as file:
file.write('Hello, World!')
Пример добавления строки в конец файла:
with open('example.txt', 'a') as file:
file.write('\nAppend this line')
4⃣Закрытие файла
Важно закрывать файл после работы с ним, чтобы освободить ресурсы. Это можно сделать с помощью метода close(), но лучше использовать конструкцию with, которая автоматически закрывает файл:
with open('example.txt', 'r') as file:
content = file.read()
# Файл автоматически закроется по завершении блока with
Пример полного цикла работы с файлом
# Открытие файла для записи
with open('example.txt', 'w') as file:
file.write('This is the first line.\n')
file.write('This is the second line.\n')
# Открытие файла для добавления
with open('example.txt', 'a') as file:
file.write('This line is added to the end of the file.\n')
# Открытие файла для чтения
with open('example.txt', 'r') as file:
for line in file:
print(line.strip())
5⃣Работа с бинарными файлами
Для работы с бинарными файлами используется режим 'b'. Например, чтение и запись изображений или других бинарных данных
# Чтение бинарного файла
with open('image.png', 'rb') as file:
data = file.read()
# Запись в бинарный файл
with open('copy_image.png', 'wb') as file:
file.write(data)
6⃣Исключения и обработка ошибок
Для обработки ошибок при работе с файлами можно использовать конструкцию try except:
try:
with open('example.txt', 'r') as file:
content = file.read()
except FileNotFoundError:
print("File not found.")
except IOError:
print("An error occurred while reading the file.")
Ставь 👍 и забирай 📚 Базу знанийtry блок: Содержит код, который потенциально может вызвать исключение.
🟠except блок: Содержит код, который выполняется, если в блоке try возникает исключение.
Общий синтаксис
try:
# Код, который может вызвать исключение
...
except SomeException as e:
# Код, который выполняется в случае возникновения исключения SomeException
...
try:
result = 10 / 0
except ZeroDivisionError as e:
print(f"Error occurred: {e}")
🚩Многоуровневая обработка исключений
Можно обрабатывать различные типы исключений по-разному. Здесь, если строку "abc" невозможно преобразовать в целое число, будет вызвано исключение ValueError, и соответствующее сообщение будет выведено.
try:
result = int("abc")
except ZeroDivisionError:
print("Attempted to divide by zero")
except ValueError:
print("Invalid value")
except Exception as e:
print(f"An unexpected error occurred: {e}")
🚩Блоки `else` и `finally`
🟠`else` блок: Выполняется, если в блоке try не возникло исключений.
🟠`finally` блок: Выполняется всегда, независимо от того, возникло исключение или нет. Используется для освобождения ресурсов, закрытия файлов и т.д.
try:
file = open('example.txt', 'r')
content = file.read()
except FileNotFoundError:
print("File not found")
else:
print("File read successfully")
finally:
file.close()
print("File closed")
Пример с использованием finally
try:
file = open('example.txt', 'r')
content = file.read()
except FileNotFoundError:
print("File not found")
else:
print("File read successfully")
finally:
try:
file.close()
print("File closed")
except NameError:
print("File was never opened")
Ставь 👍 и забирай 📚 Базу знаний
Available now! Telegram Research 2025 — the year's key insights 
