en
Feedback

Don't get caught by a cheater! Telemetrio finds and tags such channels 👉 If you want to see the tag, subscribe 👈

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

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

Open in Telegram

Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads

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 12 637 subscribers, ranking 9 922 in the Technologies & Applications category and 51 155 in the Russia region.

📊 Audience metrics and dynamics

Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 12 637 subscribers.

According to the latest data from 13 October, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -115 over the last 30 days and by -6 over the last 24 hours, overall reach remains high.

  • Verification status: Not verified
  • Engagement rate (ER): The average audience engagement rate is 6.04%. Within the first 24 hours after publication, content typically collects 4.18% reactions from the total number of subscribers.
  • Post reach: On average, each post receives 763 views. Within the first day, a publication typically gains 528 views.
  • Reactions and interaction: The audience actively supports content: the average number of reactions per post is 2.
  • 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:
“Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads”

Thanks to the high frequency of updates (latest data received on 14 October, 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.

12 637
Subscribers
-624 hours
-357 days
-11530 days
Posts Archive
🤔 Какие есть методы, чтобы реализовать протокол итерирования данных? 1. Метод iter: - Должен возвращать итератор объекта. 2. Метод next: - Возвращает следующий элемент последовательности. Поднимает исключение StopIteration, если элементы закончились. Для итераторов необходимо реализовать оба метода. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как можно оптимизировать хвостовую рекурсию в Python? Хвостовая рекурсия (tail recursion) — это особый вид рекурсии, когда рекурсивный вызов является последней операцией в функции. В языках, поддерживающих оптимизацию хвостовой рекурсии (TCO – Tail Call Optimization), такие вызовы не создают новый стек вызовов, а переиспользуют текущий, что предотвращает переполнение стека. Но в Python хвостовая рекурсия НЕ оптимизируется из-за особенностей интерпретатора (Python хранит полную историю вызовов для отладки). 🚩Способы оптимизации хвостовой рекурсии в Python 🟠Использование явного стека вместо рекурсии (итерация) Лучший способ избежать проблем с глубокой рекурсией — заменить её циклом.
def factorial(n, acc=1):
    if n == 0:
        return acc
    return factorial(n - 1, acc * n)  # Хвостовая рекурсия (но Python не оптимизирует!)
Решение: заменить на цикл (итеративный подход)
def factorial_iter(n):
    acc = 1
    while n > 0:
        acc *= n
        n -= 1
    return acc

print(factorial_iter(10000))  # Работает без ошибок
🟠Использование `sys.setrecursionlimit()` (не рекомендуется) Python имеет ограничение на глубину рекурсии (обычно около 1000). Можно его увеличить
import sys
sys.setrecursionlimit(20000)  # Увеличение лимита
🟠Использование `functools.lru_cache()` (мемоизация) Если рекурсивная функция пересчитывает одни и те же значения, можно кешировать результаты.
from functools import lru_cache

@lru_cache(None)  # Кеширует все вызовы функции
def fibonacci(n):
    if n < 2:
        return n
    return fibonacci(n - 1) + fibonacci(n - 2)

print(fibonacci(100))  # Работает быстро, без переполнения стека
🟠Использование `stack` вместо рекурсии (эмуляция стека) Если алгоритм требует рекурсии, но стек ограничен, можно использовать список как стек.
def factorial_stack(n):
    stack = [(n, 1)]
    while stack:
        n, acc = stack.pop()
        if n == 0:
            return acc
        stack.append((n - 1, acc * n))

print(factorial_stack(10000))  # Работает без ошибок
Ставь 👍 и забирай 📚 Базу знаний

Repost from easyoffer
Привет, ребята! 1,5 года я учился на программиста, а сайт easyoffer.ru стал моим пет-проектом. Я создавал его, потому что: а)
Привет, ребята! 1,5 года я учился на программиста, а сайт easyoffer.ru стал моим пет-проектом. Я создавал его, потому что: а) нужно было добавить хоть какой-нибудь проект в резюме б) подготовиться к прохождению собесов И всё получилось! Благодаря еasyoffer я успешно прошёл собеседование и устроился Python Junior-разработчиком на удаленку с зарплатой 115 тысяч рублей. Однако ещё во время разработки я понял, что у этого проекта есть потенциал. Казалось, что сайт может стать популярным и, возможно, превратиться в стартап. По-этому я с самого начала заложил в проект минимальную бизнес-модель, на случай, если сайт начнёт набирать трафик. Я предложил пользователям полный доступ к сайту в обмен на подписку на Telegram-каналы. Это позволяло развивать аудиторию, а в будущем — зарабатывать на рекламе. Результат превзошёл ожидания! С момента запуска easyoffer посетило 400 тысяч человек. А когда доход с рекламы превысил мою зарплату программиста, я принял решение уйти с работы и полностью посвятить себя разработке новой версии сайта. Вот так, зайдя в IT, через 4 месяца вышел через свой же пет-проект. Мне очень повезло Уже год я работаю над easyoffer 2.0. Это будет более масштабный и качественной новый проект: – Появится тренажер – Появятся задачи из собесов – Фильтрация контента по грейдам и еще очень много фич, о которых я расскажу позже. Хочу, довести easyoffer до ума, чтобы сайт стал настоящим помощником для всех, кто готовится к собеседованиям. По этому в ближайшее время я объявлю о старте краудфандинговой кампании, чтобы ускорить разработку и я готов щедро отблагодарить всех, кто поддержит проект. А те, кто поддержат проект первыми, получат специальные лимитированные выгодные вознаграждения. Следите за этим телеграм каналом, если хотите стать первыми сапортерами.

🤔 Что можете сказать о конструкции import package.item? Конструкция import package.item позволяет импортировать конкретный модуль или объект (например, класс или функцию) из пакета. Это: 1. Упрощает доступ к необходимому элементу без загрузки всего пакета. 2. Повышает читаемость и производительность, так как загружается только требуемый код. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Какая сложность сортировки слияния в худшем случае? Сортировка слиянием (Merge Sort) — это алгоритм, который использует разделяй и властвуй (divide & conquer). В худшем случае сложность O(n log n). 🚩Как работает сортировка слиянием? 🟠Делим массив пополам до тех пор, пока не останутся отдельные элементы. 🟠Сортируем и сливаем полученные подмассивы.
def merge_sort(arr):
    if len(arr) <= 1:
        return arr

    mid = len(arr) // 2
    left = merge_sort(arr[:mid])
    right = merge_sort(arr[mid:])

    return merge(left, right)

def merge(left, right):
    sorted_arr = []
    i = j = 0

    while i < len(left) and j < len(right):
        if left[i] < right[j]:
            sorted_arr.append(left[i])
            i += 1
        else:
            sorted_arr.append(right[j])
            j += 1

    sorted_arr.extend(left[i:])
    sorted_arr.extend(right[j:])
    return sorted_arr

arr = [5, 2, 9, 1, 5, 6]
print(merge_sort(arr))
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое утиная типизация? Это принцип, согласно которому объект считается пригодным для использования, если он имеет требуемые методы или поведение, независимо от его типа. Пример: "Если что-то выглядит как утка, плавает как утка и крякает как утка, то это, скорее всего, утка." Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Для чего нужны библиотеки sqlparse, asgiref в Django? Django использует sqlparse и asgiref как вспомогательные библиотеки для работы с SQL и асинхронностью. Разберём их назначение подробно. 🟠`sqlparse` – разбор SQL-запросов sqlparse (SQL Parser) — это библиотека для анализа, форматирования и обработки SQL-запросов. В Django она используется в админке, логах и отладке ORM. 🚩Где используется в Django? Форматирование SQL-запросов в django.db.connection.queries
   from django.db import connection
   from sqlparse import format

   queries = connection.queries  # Получаем список SQL-запросов
   for q in queries:
       print(format(q["sql"], reindent=True, keyword_case="upper"))  # Красивый SQL
Логирование SQL-запросов sqlparse помогает Django красиво выводить SQL-запросы в DEBUG=True. Команда sqlmigrate
   python manage.py sqlmigrate app_name 0001
🟠`asgiref` – асинхронность в Django asgiref (Asynchronous Server Gateway Interface Reference) — это библиотека, которая помогает Django работать в асинхронном (async) режиме. Django поддерживает ASGI с версии 3.0, и asgiref — это её обязательная зависимость. 🚩Где используется в Django? 🟠Поддержка ASGI Django с версии 3.0 поддерживает асинхронные вьюхи, WebSockets и асинхронные базы данных (например, с asyncpg). В settings.py есть параметр:
     ASGI_APPLICATION = "myproject.asgi.application"
🟠Асинхронные middleware Django 4.x поддерживает асинхронные middleware через asgiref.sync и asgiref.local. 🟠Преобразование `async` → `sync` и наоборот Django использует sync_to_async() и async_to_sync() из asgiref:
     from asgiref.sync import sync_to_async

     def sync_function():
         return "Hello from sync!"

     async_function = sync_to_async(sync_function)
     print(async_function())  # Вызывает синхронную функцию в асинхронном коде
🟠Локальное хранилище для асинхронных задач (`asgiref.local.Local`) Позволяет хранить данные отдельно для каждого потока или запроса. Ставь 👍 и забирай 📚 Базу знаний

🤔 В чём отличие 306 от 307 Redirect? 1. 306 Redirect: - Устаревший HTTP-код, ранее зарезервированный для будущего использования. В современных стандартах он не используется. 2. 307 Redirect: - Указывает временное перенаправление. В отличие от 302, гарантирует, что метод запроса (например, POST) останется неизменным. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Какие объекты можно положить в множество? В Python множество (set) — это неупорядоченная коллекция уникальных элементов, которая работает на основе хеш-таблицы. Это значит, что только хешируемые (immutable) объекты могут быть добавлены в set. 🚩Можно добавить в `set`: Числа (int, float, complex)
   s = {1, 2.5, 3+4j}
Строки (str)
   s = {"apple", "banana", "cherry"}
Кортежи (tuple), если они тоже содержат только неизменяемые объекты
   s = {(1, 2), ("a", "b")}
Булевые значения (bool)** (но True считается 1, а False — 0)
   s = {True, False, 1, 0}
   print(s)  # {False, True} (0 и 1 не добавятся повторно)
🚩Нельзя добавить в `set` Изменяемые объекты (list, set, dict)
   s = { [1, 2, 3] }  #  Ошибка: TypeError: unhashable type: 'list'
   s = { {"key": "value"} }  #  Ошибка: TypeError: unhashable type: 'dict'
Кортежи с изменяемыми элементами
   s = { (1, [2, 3]) }  #  Ошибка: TypeError
Ставь 👍 и забирай 📚 Базу знаний

🤔 Как ищет модули при импорте? Ищет модули в следующем порядке: 1. Текущая рабочая директория: сначала проверяет текущую директорию. 2. Переменная окружения PYTHONPATH: ищет в путях, указанных в переменной. 3. Стандартные каталоги Python: такие как lib/pythonX.X/site-packages. 4. Пользовательские директории: при необходимости добавленные через sys.path.append(). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Почему поиск по ключам в словаре работает быстро? В Python словари (dict) работают очень быстро, потому что они используют хеш-таблицы. Это позволяет находить значения по ключу в константное время O(1) в большинстве случаев. Давайте разберемся, как это работает. 🟠Как устроен словарь в Python? Словарь (dict) — это структура данных, которая хранит пары ключ → значение. Например:
data = {"name": "Alice", "age": 25, "city": "New York"}
print(data["age"])  # 25
🟠Как работает хеш-таблица? Основной принцип: Хеш-функция (hash()) вычисляет уникальное число (хеш) для ключа. Используется массив (таблица), где данные хранятся по индексам, связанным с хешем. Поиск по ключу — это просто вычисление хеша и обращение к нужному индексу.
print(hash("age"))  # Например, вернет 328847234 (будет разным при каждом запуске)
Когда мы пишем
value = data["age"]
🟠Почему поиск занимает O(1)? Нет линейного поиска: вместо перебора всех элементов Python сразу вычисляет, где находится нужное значение. Операция доступа занимает фиксированное время: hash() + обращение по индексу. Даже при большом количестве элементов скорость остается высокой. Добавим 1 миллион элементов и посмотрим скорость поиска:
import time

data = {i: i * 2 for i in range(1_000_000)}

start = time.time()
print(data[999_999])  # Быстро находит ключ!
end = time.time()

print("Время поиска:", end - start)  # Около 0.000001 сек
🟠Что если хеши совпадут? (Коллизии) Иногда два разных ключа могут иметь одинаковый хеш (редко, но возможно). Тогда Python использует связанный список (chaining) или перехеширование.
print(hash("abc") % 10)  # Например, 5
print(hash("xyz") % 10)  # Тоже 5 (редко, но бывает)
Ставь 👍 и забирай 📚 Базу знаний

🤔 Для чего нужны миксины? Миксины используются для добавления функциональности к классам без необходимости наследования. Это композиционный подход, где класс "смешивается" с одним или несколькими миксинами, чтобы расширить свои возможности. Примеры: 1. Реализация общих функций, таких как логирование. 2. Добавление методов для работы с базами данных или сериализацией. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как в Django работает система аутентификации? В Django встроена мощная система аутентификации, которая отвечает за идентификацию пользователей, управление учетными записями и контроль доступа к различным частям приложения. Она включает регистрацию, вход, выход, проверку прав пользователей и работу с сессиями. 🟠Как работает процесс аутентификации? Аутентификация в Django основана на модели пользователя (User) и механизме сессий. Когда пользователь входит в систему, Django проверяет его учетные данные и создает сессию, сохраняя в ней идентификатор пользователя. Процесс можно разделить на несколько шагов: Пользователь вводит логин и пароль. Django проверяет данные через аутентификационный бэкенд. Если данные верны, Django создает сессию. При каждом запросе Django проверяет, авторизован ли пользователь. 🚩Основные компоненты системы аутентификации 🟠Модель пользователя (`User`) Django предоставляет встроенную модель пользователя django.contrib.auth.models.User. Она содержит: username, email, password is_staff, is_superuser, is_active date_joined, last_login
from django.contrib.auth.models import User

# Создание пользователя
user = User.objects.create_user(username="admin", password="12345")
user.email = "admin@example.com"
user.save()

# Проверка пароля
print(user.check_password("12345"))  # True
🟠Аутентификация (`authenticate`) Django использует функцию authenticate() для проверки учетных данных.
from django.contrib.auth import authenticate

user = authenticate(username="admin", password="12345")
if user is not None:
    print("Успешный вход!")
else:
    print("Ошибка аутентификации!")
🟠Вход и выход (`login` / `logout`) После успешной аутентификации пользователя можно "впустить" с помощью login().
from django.contrib.auth import login, logout

def user_login(request):
    user = authenticate(username="admin", password="12345")
    if user:
        login(request, user)  # Создает сессию
        return "Пользователь вошел!"
    return "Ошибка входа"

def user_logout(request):
    logout(request)  # Удаляет сессию
    return "Пользователь вышел!"
🟠Проверка аутентификации Во вьюхах можно проверить, авторизован ли пользователь
if request.user.is_authenticated:
    print("Пользователь залогинен:", request.user.username)
else:
    print("Гость")
Для защиты маршрутов можно использовать декоратор @login_required:
from django.contrib.auth.decorators import login_required

@login_required
def profile(request):
    return "Это страница профиля!"
🚩Настройка аутентификации 🟠Настройки в `settings.py` Django по умолчанию использует django.contrib.auth.backends.ModelBackend для аутентификации через базу данных. Можно добавить кастомные бэкенды:
AUTHENTICATION_BACKENDS = [
    'django.contrib.auth.backends.ModelBackend',  # Обычная аутентификация
]
🟠Изменение модели пользователя Если стандартной модели User недостаточно, можно создать кастомную модель
from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
    phone_number = models.CharField(max_length=15, unique=True)

# В settings.py указываем свою модель
AUTH_USER_MODEL = "myapp.CustomUser"
🟠Разрешения и группы Django поддерживает группы пользователей и права доступа.
if user.has_perm("app_name.permission_codename"):
    print("У пользователя есть разрешение!")
Использование групп
from django.contrib.auth.models import Group

group = Group.objects.create(name="Editors")  # Создаем группу
user.groups.add(group)  # Добавляем пользователя в группу
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое модульное программирование? Это подход к разработке программного обеспечения, при котором приложение разбивается на отдельные модули (части), каждый из которых решает конкретную задачу. Преимущества: 1. Улучшение читаемости и тестируемости кода. 2. Повторное использование модулей в других проектах. 3. Упрощение отладки и сопровождения. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

⚡ Когда говорят, что Python слишком простой язык, на сцену выходит канал Python Learning Здесь легко научиться: ▪️Превращать
⚡ Когда говорят, что Python слишком простой язык, на сцену выходит канал Python Learning Здесь легко научиться: ▪️Превращать текст в голос ▪️Определять локацию по IP ▪️Писать телеграм-ботов ▪️Создавать 3D-игры Самый необычный канал про Python, подписывайся – @Python_per_month

🤔 Какие есть виды файловых объектов? В Python существует несколько типов файловых объектов, которые используются для работы с различными типами данных. Рассмотрим основные виды файловых объектов и их особенности. 🟠Текстовые файлы (`TextIOWrapper`) Это самый распространённый тип файловых объектов. Такие файлы используются для работы с текстовыми данными и поддерживают строковые операции.
   with open("example.txt", "w", encoding="utf-8") as file:
       file.write("Привет, мир!")  # Записываем текст в файл

   with open("example.txt", "r", encoding="utf-8") as file:
       content = file.read()  # Читаем текст из файла
       print(content)
🟠Бинарные файлы (`BufferedReader`, `BufferedWriter`) Эти файлы используются для работы с двоичными данными (изображениями, видео, аудиофайлами и т. д.).
   with open("image.jpg", "rb") as file:
       binary_data = file.read()  # Читаем файл в бинарном режиме
       print(binary_data[:10])  # Выведем первые 10 байтов

   with open("copy.jpg", "wb") as file:
       file.write(binary_data)  # Записываем данные в новый файл
🟠Файлы ввода-вывода в памяти (`io.StringIO`, `io.BytesIO`) Эти объекты представляют собой файловые буферы, которые хранят данные в оперативной памяти, а не на диске.
   from io import StringIO

   file = StringIO()
   file.write("Привет, мир!")  # Запись данных в буфер
   file.seek(0)  # Перемещаем указатель в начало
   print(file.read())  # Читаем данные из буфера
Пример работы с BytesIO:
   from io import BytesIO

   file = BytesIO()
   file.write(b"Binary data")  # Запись бинарных данных
   file.seek(0)
   print(file.read())  # Чтение данных
🟠Файловые объекты на основе сокетов, пайпов и других источников Python позволяет работать с файловыми объектами, полученными из нестандартных источников, например, сокетов или каналов связи (pipes).
   import socket

   s = socket.socket()
   s.connect(("example.com", 80))
   s.sendall(b"GET / HTTP/1.1\r\nHost: example.com\r\n\r\n")
   response = s.makefile("r", encoding="utf-8")  # Создание файлового объекта
   print(response.readline())  # Читаем первую строку HTTP-ответа
   s.close()
Ставь 👍 и забирай 📚 Базу знаний

🤔 Чем отличается RIGHT, LEFT, INNER JOIN? - LEFT JOIN: возвращает все строки из левой таблицы и соответствующие строки из правой. Несоответствующие строки правой таблицы заполняются NULL. - RIGHT JOIN: возвращает все строки из правой таблицы и соответствующие строки из левой. Несоответствующие строки левой таблицы заполняются NULL. - INNER JOIN: возвращает только строки, которые соответствуют условиям соединения в обеих таблицах. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что в python не является объектом? В Python практически всё является объектом: числа, строки, функции, классы, модули и даже сам интерпретатор Python рассматривает их как объекты. Однако есть несколько вещей, которые объектами не являются: 🟠Операторы и синтаксические конструкции Операторы (+, -, *, and, or, not и т. д.) сами по себе не являются объектами. Они — часть синтаксиса языка и не имеют представления в виде объектов в памяти.
   a = 10 + 5  # Оператор "+" выполняет сложение, но сам по себе не объект
   print(type(+))  # Ошибка: нельзя получить тип оператора
🟠Ключевые слова (keywords) Встроенные ключевые слова Python (if, else, while, for, def, class, return и т. д.) не являются объектами. Они зарезервированы интерпретатором и используются для управления потоком выполнения кода.
   print(type(if))  # Ошибка: ключевое слово не является объектом
🟠Идентификаторы переменных Хотя переменные ссылаются на объекты, сами идентификаторы (имена переменных) — это просто ссылки, а не объекты.
   x = 42  # x — это имя, а не объект
   print(type(x))  # Это целое число, но само имя "x" объектом не является
🟠Аннотации типов во время компиляции Аннотации типов в Python, такие как list[str], не создают объекты во время компиляции кода. Они интерпретируются только на уровне анализа типов.
   def func(x: int) -> str:
       return str(x)
Ставь 👍 и забирай 📚 Базу знаний

🤔 Как с помощью одного запроса можно выбрать данные из двух таблиц? Используйте объединение таблиц через UNION или соединения JOIN. Например, SELECT * FROM table1 UNION SELECT * FROM table2. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое @dataclass? Это декоратор, предоставленный модулем dataclasses, который автоматически генерирует специальные методы, такие как __init__,🤔 Что так🤔 Что т и другие, для вашего класса. Это упрощает создание классов, предназначенных для хранения данных, устраняя необходимость писать много шаблонного кода. 🚩Зачем нужен 🟠Упрощение кода Автоматически генерирует методы, сокращая шаблонный код. 🟠Читабельность Делает код более чистым и легким для понимания. 🟠Удобство Обеспечивает удобные и мощные возможности для работы с данными. 🚩Как использовать Нужно импортировать его из модуля dataclasses и применить к классу. Внутри класса достаточно определить только поля данных.
from dataclasses import dataclass

@dataclass
class Person:
    name: str
    age: int

# Примеры использования
person1 = Person(name="Alice", age=30)
person2 = Person(name="Bob", age=25)

print(person1)  # Вывод: Person(name='Alice', age=30)
print(person2)  # Вывод: Person(name='Bob', age=25)
print(person1 == person2)  # Вывод: False
🚩Автоматически генерируемые методы 🟠`__init__` Инициализирует объект с заданными значениями атрибутов. 🟠`__repr__` Возвращает строковое представление объекта, удобное для отладки. 🟠`__eq__` Сравнивает объекты на равенство по их атрибутам. 🟠`__lt__`, __le__,🤔 Что так🤔 Что такМогут быть сгенерированы для сравнения объектов (если указано). 🚩Настройка поведения Вы можете настроить поведение @dataclass с помощью параметров, таких как order, frozen, и других. 🟠`order=True` Генерирует методы для сравнения объектов. 🟠`frozen=True` Делает экземпляры неизменяемыми (immutable). Пример
from dataclasses import dataclass

@dataclass(order=True, frozen=True)
class Person:
    name: str
    age: int

person1 = Person(name="Alice", age=30)
person2 = Person(name="Bob", age=25)

print(person1 > person2)  # Вывод: True (поскольку 'Alice' > 'Bob' по алфавиту, если имена равны, сравниваются возраста)
# person1.age = 31  # Ошибка: FrozenInstanceError (поскольку класс заморожен)
🚩Поля данных и их настройки Вы можете использовать функцию field() для настройки отдельных полей, например, для указания значений по умолчанию или исключения полей из методов
5)

print(
🤔 Что т и других.
from dataclasses import dataclass, field

@dataclass
class Person:
    name: str
    age: int = 0
    address: str = field(default="Unknown", repr=False)

person = Person(name="Alice")
print(person)  # Вывод: Person(name='Alice', age=0)
Ставь 👍 и забирай 📚 Базу знаний