Python | Вопросы собесов
前往频道在 Telegram
Cайт: easyoffer.ru Реклама: @easyoffer_adv ВП: @easyoffer_vp Тесты t.me/+20tRfhrwPpM4NDQy Задачи t.me/+nsl4meWmhfQwNDVi Вакансии t.me/+cXGKkrOY2-w3ZTky
显示更多📈 Telegram 频道 Python | Вопросы собесов 的分析概览
频道 Python | Вопросы собесов (@python_easy_ru) 俄语 语言赛道中的 是活跃参与者。目前社区聚集了 13 107 名订阅者,在 技术与应用 类别中位列第 9 737,并在 俄罗斯 地区排名第 50 735 位。
📊 受众指标与增长动态
自 невідомо 创建以来,项目保持高速增长,吸引了 13 107 名订阅者。
根据 08 六月, 2026 的最新数据,频道保持稳定运转。过去 30 天订阅人数变化为 -51,过去 24 小时变化为 1,整体触达仍然可观。
- 认证状态: 未认证
- 互动率 (ER): 平均受众互动率为 8.36%。内容发布后 24 小时内通常能获得 5.74% 的反应,占订阅者总量。
- 帖子覆盖: 每篇帖子平均可获得 1 096 次浏览,首日通常累积 752 次浏览。
- 互动与反馈: 受众积极参与,单帖平均反应数为 4。
- 主题关注点: 内容集中在 ставь, модуль, строка, docker, alice 等核心主题上。
📝 描述与内容策略
作者将该频道定位为表达主观观点的平台:
“Cайт: easyoffer.ru
Реклама: @easyoffer_adv
ВП: @easyoffer_vp
Тесты t.me/+20tRfhrwPpM4NDQy
Задачи t.me/+nsl4meWmhfQwNDVi
Вакансии t.me/+cXGKkrOY2-w3ZTky”
凭借高频更新(最新数据采集于 09 六月, 2026),频道始终保持新鲜度与高覆盖。分析显示受众积极互动,使其成为 技术与应用 类别中的关键影响点。
13 107
订阅者
+124 小时
-97 天
-5130 天
帖子存档
13 106
🤔 Какие есть коды ошибок HTTP?
В HTTP коды состояния указывают, как сервер обработал запрос. Они делятся на 5 категорий:
1xx (Информационные – запрос принят, продолжаем.
2xx (Успешные) – всё хорошо.
3xx (Перенаправления) – запрашиваемый ресурс перемещён.
4xx (Ошибки клиента) – клиент отправил неправильный запрос.
5xx (Ошибки сервера) – сервер не смог обработать запрос.
🚩Как исправить ошибки HTTP?
4xx:
400: Проверить формат запроса.
401: Убедиться, что пользователь авторизован.
403: Проверить права доступа.
404: Убедиться, что URL правильный.
5xx:
500: Проверить код сервера (ошибки в логах).
502/504: Проверить настройки Nginx/Proxy.
503: Сервер перегружен → добавить балансировку нагрузки.
Ставь 👍 и забирай 📚 Базу знаний
13 106
+4
⚡️ Python теперь в Telegram!
Ребята сделали крутейший канал, где на простых картинках и понятном языке обучают Python, делятся полезными фишками и инструментами
Подписывайтесь: @PythonPortal
13 106
🤔 Что такое мутабельные и иммутабельные типы данных?
1. Мутабельные (mutable): данные, которые можно изменять после создания, например, списки (list), словари (dict), множества (set).
2. Иммутабельные (immutable): данные, которые нельзя изменить после создания, например, строки (str), числа (int, float), кортежи (tuple).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
13 106
🤔 Назовите основные мидлвари, зачем они нужны
Middleware (промежуточное ПО) — это специальные классы, которые обрабатывают запросы и ответы, проходящие через Django. Они позволяют изменять данные, проверять доступ, логировать действия и многое другое.
🚩Основные мидлвари Django
🟠SecurityMiddleware
Добавляет важные HTTP-заголовки для защиты сайта:
-
Strict-Transport-Security (HTTPS)
- X-Content-Type-Options: nosniff
- X-Frame-Options: DENY
🟠CommonMiddleware
Отвечает за:
Перенаправление с APPEND_SLASH=True (если /about → перенаправит на /about/).
Удаление www. (www.example.com → example.com).
Обработка кодировки и контента.
🟠SessionMiddleware
Позволяет Django хранить данные пользователя между запросами (например, авторизацию).
request.session["user_id"] = 42 # Сохраняем ID пользователя в сессии
🟠AuthenticationMiddleware
Позволяет работать с request.user, автоматически определяя пользователя.
if request.user.is_authenticated:
print(f"Пользователь: {request.user.username}")
🟠CSRF Middleware (CsrfViewMiddleware)
Защищает от атак межсайтовой подделки запросов (CSRF).
При обработке форм Django требует специальный CSRF-токен:
<form method="POST">
{% csrf_token %}
<input type="text" name="name">
</form>
🟠XFrameOptionsMiddleware
Запрещает встраивать сайт в <iframe>, предотвращая атаку Clickjacking.
X-Frame-Options: DENY
🟠MessageMiddleware
Позволяет передавать временные сообщения (django.contrib.messages).
from django.contrib import messages
messages.success(request, "Вы успешно вошли!")
messages.error(request, "Ошибка авторизации!")
🚩Как добавить или отключить мидлвари?
Мидлвари хранятся в settings.py:
MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
]
🚩Как написать свой мидлвар?
Допустим, хотим логировать все запросы.
Создаём middleware.py
import datetime
class LogMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
print(f"[{datetime.datetime.now()}] Запрос: {request.path}")
response = self.get_response(request)
return response
Добавляем в settings.py
MIDDLEWARE.append("myapp.middleware.LogMiddleware")
Теперь в консоли будем видеть все запросы!
[2024-02-28 12:00:00] Запрос: / [2024-02-28 12:01:00] Запрос: /login/Ставь 👍 и забирай 📚 Базу знаний
13 106
🤔 Какие декораторы, которые есть в стандартной библиотеке есть?
1. @staticmethod: создаёт статический метод, не зависящий от экземпляра класса.
2. @classmethod: создаёт метод, который получает ссылку на класс, а не на объект.
3. @property: позволяет обращаться к методу как к атрибуту.
4. @functools.lru_cache: кэширует результаты функции для ускорения повторных вызовов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
13 106
🤔 Что такое Host?
Host (хост) — это устройство или сервер, подключённый к сети, который может предоставлять или запрашивать данные.
GET /index.html HTTP/1.1
Host: example.com
🚩Где используется `Host`?
🟠В HTTP-запросах (заголовок `Host`)
Когда браузер запрашивает сайт, он отправляет заголовок Host, чтобы сервер знал, какой сайт нужно отдать.
GET / HTTP/1.1
Host: google.com
User-Agent: Mozilla/5.0
🟠В настройке DNS и доменных имён
Host — это доменное имя, привязанное к IP-адресу.
- example.com → 192.168.1.100
- mail.example.com → 192.168.1.101
127.0.0.1 mysite.local
🟠3. В локальной сети (локальные хосты)
Внутри сети устройства тоже считаются хостами (192.168.1.10, 192.168.1.20). localhost (127.0.0.1) — это всегда локальный компьютер.
Ставь 👍 и забирай 📚 Базу знаний13 106
🤔 При каких ошибках HTTP есть смысл ретраить?
Ретрай (повтор запроса) возможен при:
- 429 (Too Many Requests) — если сервер просит подождать.
- 503 (Service Unavailable) — сервер временно недоступен.
- 502/504 — сбои на уровне прокси/шлюзов, возможно временные.
Ретрай не имеет смысла при ошибках клиента (например, 400 или 404).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
13 106
🤔 Как управлять кешированием в HTTP?
Кэширование в HTTP позволяет уменьшить нагрузку на сервер и ускорить загрузку страниц за счёт сохранения копий ресурсов.
Управление кэшем происходит через HTTP-заголовки, которые указывают, как долго хранить данные и когда обновлять их.
🟠Управление кэшированием через `Cache-Control`
Cache-Control — основной заголовок для кэширования, который указывает, как долго хранить ресурс и когда обновлять его.
Cache-Control: no-cache # Браузер всегда запрашивает ресурс заново
Cache-Control: no-store # Запрещает кэширование вообще
Cache-Control: public, max-age=3600 # Кэшировать 1 час (3600 секунд)
Cache-Control: private, max-age=600 # Кэш только для одного пользователя (например, личный кабинет)
Cache-Control: must-revalidate # Клиент должен проверять, истёк ли срок кэша перед загрузкой
🟠Управление кэшем с `ETag` (оптимизированное обновление)
ETag — это уникальный идентификатор версии файла.
Сервер отправляет ресурс с ETag:
ETag: "abc123"
При следующем запросе браузер отправляет If-None-Match:
If-None-Match: "abc123"
Если ресурс не изменился, сервер отвечает 304 Not Modified (клиент использует кэш).
Если ресурс изменился — сервер отправляет новую версию.
HTTP/1.1 304 Not Modified
🟠Кэширование через `Last-Modified`
Работает аналогично ETag, но вместо идентификатора используется дата последнего изменения.
Сервер отправляет заголовок
Last-Modified: Wed, 21 Feb 2024 10:00:00 GMT
Браузер запрашивает ресурс с If-Modified-Since
If-Modified-Since: Wed, 21 Feb 2024 10:00:00 GMT
🟠Полное отключение кэша
Если нужно всегда загружать свежие данные, используем:
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache # Устарел, но нужен для старых браузеров
Expires: 0
🟠Управление кэшем через `Vary`
Если ресурс зависит от заголовков (User-Agent, Accept-Encoding), используем Vary.
Vary: User-Agent
🟠Принудительное обновление кэша (Cache Busting)
Если сервер отправил старый кэш, можно обновить ресурс с новым URL.
Способы
Добавить версию в URL
/style.css?v=2Использовать хеш в имени файла:
/style.abc123.cssСтавь 👍 и забирай 📚 Базу знаний
13 106
🤔 Что относится к изменяемым типам данных и к неизменяемым?
В Python к изменяемым типам данных относятся списки (list), множества (set), словари (dict), а к неизменяемым — числа, строки (str), кортежи (tuple), замороженные множества (frozenset).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
13 106
Repost from easyoffer
+2
Я боялся, что провалю собеседование. Так появился easyoffer
Когда я только начинал искать первую работу программистом, меня пугала мысль, что я просто не смогу ответить на вопросы на собеседовании.
Типа… ты потратил месяцы на то, чтобы учиться, писал pet-проекты, собирал резюме, рассылаешь отклики — и всё может закончиться на одном-единственном вопросе, на который ты не знаешь ответ.
Я реально боялся.
Я смотрел видео mock-собеседований на YouTube, останавливал каждое, выписывал вопросы в Notion. Потом вручную писал к ним ответы. И потом ещё по нескольку раз перечитывал. Такой вот "тренажёр" на коленке.
📎 (там на картинке — один из моих реальных списков в Notion, ставь 🔥 если тоже так делал)
В какой-то момент я посчитал — у меня уже было выписано больше 500 вопросов. Я почувствовал ужас.
Потому что невозможно всё это зазубрить. А что, если спросят как раз тот, к которому я не успел подготовиться?..
Тогда и пришла идея
А что если понять, какие из вопросов встречаются чаще всего? Чтобы не учить всё подряд, а сфокусироваться на главном.
Так родился easyoffer.
Сначала — просто как пет-проект, чтобы показать в резюме и подготовиться к собесам. А потом оказалось, что он реально помогает людям. За первые месяцы его посетили сотни тысяч человек. И я понял: это больше, чем просто пет-проект.
Сейчас я делаю EasyOffer 2.0
И уже не один, а вместе с вами.
В новой версии будут:
– вопросы из реальных собесов, с фильтрацией по грейду, компании, типу интервью
– тренажёр с карточками (по принципу интервальных повторений — как в Anki)
– база задач с интервью
– тренажёр «реальное собеседование», чтобы отрепетировать как в жизни
Каждая фича упрощает и сокращает время на подготовку. Все эти штуки я бы мечтал иметь, когда сам готовился к собеседованиям.
Я делаю всё на свои деньги. Никаких инвесторов. Только вы и я.
Если вы хотите помочь — сейчас самое важное время.
Краудфандинг уже стартовал. Благодаря нему я смогу привлечь больше людей для разработки, сбору и обработки собеседований.
Все, кто поддержат проект до релиза, получат:
🚀 1 год PRO-доступа по цене месячной подписки. Его можно активировать в любое время, например когда начнете готовится к собесам.
➕ Доступ к закрытому бета-тесту
Поддержать 👉 https://planeta.ru/campaigns/easyoffer
Спасибо, что верите в этот проект 🙌
13 106
🤔 Какие инструменты используются для виртуального окружения?
Для создания и управления виртуальными окружениями существует несколько инструментов. Вот некоторые из наиболее распространенных:
🟠virtualenv
Это один из самых популярных инструментов для создания виртуальных окружений. Он позволяет создавать изолированные среды, в которых можно устанавливать и использовать зависимости для конкретных проектов.
🟠venv
Это встроенный инструмент для создания виртуальных окружений, доступный начиная с Python 3.3. Он предоставляет функциональность, аналогичную virtualenv, но является частью стандартной библиотеки.
🟠Pipenv
Это инструмент для управления зависимостями и виртуальными окружениями. Он комбинирует возможности управления зависимостями с помощью
pip и создания виртуальных окружений с помощью virtualenv или venv. Pipenv также автоматически создает и активирует виртуальное окружение для каждого проекта.
🟠Poetry
Это современный инструмент для управления зависимостями и виртуальными окружениями. Он предоставляет возможности для управления зависимостями, создания виртуальных окружений, управления сценариями (scripts) и публикации пакетов. Poetry использует файл pyproject.toml для определения зависимостей и настроек проекта.
Ставь 👍 и забирай 📚 Базу знаний13 106
🤔 Для чего нужно ключевое слово global?
Ключевое слово global используется для объявления переменной глобальной внутри функции. Без него любое присваивание переменной внутри функции создаёт новую локальную переменную. Если нужно изменить переменную, определённую вне функции — следует явно указать global.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
13 106
🤔 За счет чего достигается константная величина ячейки памяти для всех элементов, если типы данных в списке могут быть разными?
В Python список (
list) — это массив указателей. Элементы списка не хранятся внутри него, а находятся в других местах памяти, а сам список содержит ссылки (указатели) на них.
🚩Как Python хранит список в памяти?
Допустим, у нас есть список:
my_list = [10, "hello", 3.14, [1, 2, 3]]
+-----------------+ | Указатель → 10 | (int) | Указатель → "hello" | (str) | Указатель → 3.14 | (float) | Указатель → [1, 2, 3] | (list) +-----------------+🚩Проверим на практике Мы можем увидеть размер пустого списка и списка с элементами с помощью
sys.getsizeof():
import sys
empty_list = []
print(sys.getsizeof(empty_list)) # 56 байт (сам список)
filled_list = [10, "hello", 3.14, [1, 2, 3]]
print(sys.getsizeof(filled_list)) # 88 байт (список + 4 указателя)
🚩Размер ячейки списка всегда одинаковый
Каждая ячейка списка занимает фиксированное количество памяти, равное размеру указателя (8 байт на 64-битной системе).
import ctypes
my_list = [10, "hello", 3.14, [1, 2, 3]]
for i in range(len(my_list)):
print(ctypes.cast(id(my_list[i]), ctypes.py_object).value)
Ставь 👍 и забирай 📚 Базу знаний13 106
🤔 Какие области видимости есть?
Согласно правилу LEGB:
- Локальная (внутри текущей функции).
- Замыкающая (внутри внешней функции, если функция вложена).
- Глобальная (на уровне модуля).
- Встроенная (встроенные функции и константы вроде print, len, None).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
13 106
🤔 Какая сложность у пузырьковой сортировки?
Пузырьковая сортировка (Bubble Sort) — это один из самых простых, но неэффективных алгоритмов сортировки.
🚩Как работает пузырьковая сортировка?
1. Проходим по массиву несколько раз.
2. На каждой итерации сравниваем соседние элементы и меняем их местами, если они идут не в том порядке.
3. После первого прохода наибольший элемент оказывается в конце массива.
4. Повторяем процесс, пока массив не отсортируется.
🚩Рассчёт сложности (`O(n²)`)
Количество сравнений в худшем случае:
- На первой итерации:
n-1 сравнений
- На второй: n-2 сравнений
- На третьей: n-3 сравнений
- …
- Всего: (n-1) + (n-2) + ... + 1 = O(n²)
Количество обменов (swap) в худшем случае:
- Если массив полностью перевёрнут, на каждой итерации будет максимальное количество перестановок → O(n²).
🚩Оптимизированная пузырьковая сортировка (`O(n)`)
Если на проходе по массиву не было перестановок, значит массив уже отсортирован.
def bubble_sort(arr):
n = len(arr)
for i in range(n):
swapped = False # Флаг, отслеживающий перестановки
for j in range(n - i - 1):
if arr[j] > arr[j + 1]: # Если элементы в неправильном порядке, меняем местами
arr[j], arr[j + 1] = arr[j + 1], arr[j]
swapped = True
if not swapped:
break # Если перестановок не было, завершаем сортировку
arr = [1, 2, 3, 4, 5] # Уже отсортированный массив
bubble_sort(arr)
print(arr) # [1, 2, 3, 4, 5]
Ставь 👍 и забирай 📚 Базу знаний13 106
От чего зависит эффективность автотестов?
От их правильного написания и поддерживаемости!
В QA GURU учат приручать Java, чтобы ваши автотесты работали, как часы. Вот несколько лайфхаков, о которых мы расскажем на вводном занятии уже сегодня (20:00 Мск):
1. Используйте понятные и описательные названия тестов
Названия тестов должны четко отражать их цель. Это упрощает понимание кода всеми членами команды.
Например:
// Хорошо
public void verifyLoginWithValidCredentials() { ... }
// Плохо
public void test1() { ... }
Описательные названия помогают быстро понять, что проверяет тест, без необходимости изучения его внутренней логики.
2. Применяйте Page Object Model (POM)
Page Object Model позволяет отделить логику теста от структуры веб-страницы, что делает код более модульным и удобным для поддержки при изменениях интерфейса.
Пример использования:
// Класс
Page Object
public class LoginPage {
private By usernameField = By. id("username");
private By passwordField = By. id("password");
private By loginButton = By. id("loginBtn");
public void enterUsername(String username) {
driver.findElement(usernameField).sendKeys(username);
}
public void enterPassword(String password) {
driver.findElement(passwordField).sendKeys(password);
}
public void clickLoginButton() {
driver.findElement(loginButton).click();
}
}
// Тестовый сценарий
LoginPage loginPage = new LoginPage(driver);
loginPage.enterUsername("john.doe");
loginPage.enterPassword("password123");
loginPage.clickLoginButton();
POM способствует повторному использованию кода и улучшает читаемость тестов.
3. Используйте параметризацию и data-driven подход
Параметризованные тесты позволяют запускать один и тот же сценарий с различными входными данными, что увеличивает охват тестирования без дублирования кода.
@ ParameterizedTest
@ CsvSource({"john.doe, password123", "jane.smith, test@123"})
public void verifyLogin(String username, String password) {
LoginPage loginPage = new LoginPage(driver);
loginPage.enterUsername(username);
loginPage.enterPassword(password);
loginPage.clickLoginButton();
}
Этот подход делает тесты более гибкими и масштабируемыми.
4. Следуйте принципу AAA (Arrange, Act, Assert)
Структурируйте тесты в три этапа:
Arrange: подготовка данных и окружения.
Act: выполнение действия.
Assert: проверка результата.
Пример:
@ Test
public void testAddition() {
// Arrange
Calculator calculator = new Calculator();
// Act
int result = calculator.add(2, 3);
// Assert
assertEquals(5, result);
}
Этот подход делает тесты более организованными и легко читаемыми.
5. Логирование и отчетность
Добавляйте логирование в тесты для диагностики проблем:
log. info("Entering username: " + username);
log. info("Clicking on the login button");
Интеграция инструментов отчетности (например, Allure) помогает визуализировать результаты тестов и быстро выявлять ошибки.
6. Регулярные ревью кода
Проводите регулярные ревью автотестов для повышения качества кода. Это помогает выявить потенциальные проблемы, улучшить читаемость и обеспечить соблюдение стандартов кодирования.
7. Автоматизация и CI/CD
Используйте инструменты автоматизации (Maven, Gradle) для запуска тестов в рамках CI/CD пайплайнов. Это ускоряет процесс разработки и обеспечивает стабильность приложения на всех этапах.
Хотите узнать больше? Присоединяйтесь уже сегодня (20:00 Мск) к бесплатному открытому уроку!
🔗 Зарегистрируйтесь на первый открытый урок по ссылке.13 106
🤔 Что из POST, PUT и PATCH идемпотентно?
- PUT — идемпотентный: повторный вызов приводит к одному и тому же состоянию ресурса.
- PATCH — условно идемпотентный, если изменения одинаковы.
- POST — не идемпотентный, каждый запрос может создать новый объект или изменить данные.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
13 106
🤔 Зачем нужны схемы в БД?
Схема (schema) в базе данных — это логическая группировка объектов (таблиц, индексов, представлений и т. д.) внутри одной БД.
🚩Что такое схема в БД?
Схема — это контейнер для объектов БД (таблиц, индексов, процедур).
База данных (company_db) ├── Схема: public (по умолчанию) │ ├── Таблица: employees │ ├── Таблица: departments ├── Схема: hr │ ├── Таблица: employees │ ├── Таблица: salaries ├── Схема: sales │ ├── Таблица: customers │ ├── Таблица: orders🚩Как создавать и использовать схемы? Создание схемы (
CREATE SCHEMA)
CREATE SCHEMA hr; -- Создаём схему "hr"
Создание таблицы внутри схемы
CREATE TABLE hr.employees (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
position VARCHAR(50)
);
Выбор схемы по умолчанию
SET search_path TO hr;
🚩Где полезны схемы?
🟠Разделение данных по модулям
Если в БД хранятся разные области бизнеса (кадры, продажи, финансы), их можно разделить по схемам:
- hr.employees, hr.salaries
- sales.orders, sales.customers
🟠Разные версии одной БД
Например, в PostgreSQL можно создать схему dev для тестов:
- dev.users — тестовая версия таблицы
- prod.users — продакшен-версия
🟠Безопасность и доступ пользователей
Можно дать доступ к разным схемам разным пользователям:
GRANT USAGE ON SCHEMA hr TO hr_manager;
GRANT SELECT ON ALL TABLES IN SCHEMA hr TO hr_manager;
Ставь 👍 и забирай 📚 Базу знаний13 106
Repost from Идущий к IT
Привет ребята, мне на easyoffer.ru нужен:
🐍 Middle/Senior Python Developer
Стек:
DRF, PostgreSQL, Redis, Celery, Docker, Sentry
Задачи:
🟠Разработка и поддержка REST API для новых фичей
🟠Интеграция с веб-сервисами и внешними API
🟠Подключение и поддержка платежных систем
🟠Написание юнит- и интеграционных тестов
🟠Оптимизация производительности и масштабирование
🟠Взаимодействие с ML-моделями — будет плюсом
Ожидания:
🟠2+ лет опыта DRF
🟠Опыт интеграций платежных систем
🟠Опыт работы с PostgreSQL, Celery, Redis, Docker
🟠Умение проектировать архитектуру REST-API
🟠Ответственный подход к качеству кода и тестированию
Опыт в стартапах и небольших командах будет плюсом
Условия:
– Частичная занятость (2-3 часа в день)
– Удаленная работа
– Свободный график
– Почасовая оплата
✈ Если вас заинтересовала вакансия, напишите мне @kivaiko
1. Резюме
2. Ссылку на github
3. Комфортную ставку за час
13 106
🤔 Какие магические методы и для чего используются?
Магические методы (например, __init__, __str__, __len__, __add__) используются для определения поведения объектов в специфичных ситуациях, таких как инициализация, строковое представление, арифметические операции или работа с коллекциями.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
现已上线!2025 年 Telegram 研究 — 年度关键洞察 
