Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 967новых вакансий за сутки·94 749вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 308
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 402 кандидата открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python17 098
  • Облачные технологии13 740
  • QA вакансии3 442
  • Backend вакансии2 113
  • Инженер данных1 769
  • Продакт-менеджер1 215

Разработка

  • Android1 857
  • iOS1 692
  • Fullstack вакансии980
  • AI вакансии956
  • Frontend вакансии750
  • Mobile вакансии44

По стеку

  • Go8 640
  • Java6 540
  • Node.js2 016
  • .NET1 705
  • Kotlin1 619
  • Rust1 458
  • C#701
  • PHP681
  • C++564

DevOps и инфраструктура

  • Kubernetes7 596
  • DevOps вакансии6 045
  • Linux-инфраструктура5 418
  • Terraform / IaC4 165
  • CI/CD3 212
  • Мониторинг и Observability1 759
  • SRE564
  • Кибербезопасность430

Аналитика и данные

  • Data Scientist1 093
  • Бизнес-аналитик914
  • Аналитик данных851
  • Системный аналитик150

Другие направления

  • Проджект-менеджер570
  • UI/UX дизайн144
  • Ручное тестирование14

По регионам

  • Вакансии в США45 435
  • Вакансии в Европе23 707
  • Вакансии в Канаде4 503
  • Работа в России3 905

По формату

  • Удалённые вакансии76 073
  • Релокация в США45 435
  • Гибридная работа12 406
  • Офисная работа7 080

По уровню

  • Senior вакансии42 979
  • Middle вакансии21 322
  • Junior вакансии6 799

Сейчас нанимают

Все компании
  • Wise192 вакансии
  • Rakuten189 вакансий
  • ASML165 вакансий
  • Grab139 вакансий
  • Celonis39 вакансий
  • Spotify36 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме PythonВсе вопросы
PythonJuniorТеория

Объясните разницу между __str__ и __repr__.

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

__str__ возвращает читаемое строковое представление объекта для конечного пользователя, __repr__ — однозначное техническое представление для разработчика, которое в идеале позволяет воссоздать объект через eval().

Пример

from datetime import datetime


class Event:
    def __init__(self, title: str, timestamp: datetime) -> None:
        self.title = title
        self.timestamp = timestamp

    def __repr__(self) -> str:
        # Цель: eval(repr(obj)) == obj (при доступном конструкторе)
        return f"Event(title={self.title!r}, timestamp={self.timestamp!r})"

    def __str__(self) -> str:
        # Цель: удобочитаемость
        return f"{self.title} в {self.timestamp:%Y-%m-%d %H:%M}"


e = Event("Релиз", datetime(2024, 6, 1, 12, 0))
print(repr(e))   # Event(title='Релиз', timestamp=datetime.datetime(2024, 6, 1, 12, 0))
print(str(e))    # Релиз в 2024-06-01 12:00
print(e)         # Релиз в 2024-06-01 12:00  (использует __str__)

# В интерактивной оболочке или логах repr() полезнее:
events = [e]
print(events)    # [Event(title='Релиз', timestamp=...)]

__str__ и __repr__: назначение и различия

В Python каждый объект может определить два строковых представления:

  • __repr__ — «официальное» представление для разработчиков. Должно быть однозначным и, по возможности, позволять воссоздать объект через eval(). Вызывается функцией repr(), а также в интерактивной оболочке при выводе объекта.
  • __str__ — «неформальное» читаемое представление для пользователя. Вызывается функцией str(), print() и форматированием строк (f-строки, format()).

Если __str__ не определён, Python откатывается к __repr__. Обратное неверно: отсутствие __repr__ даёт дефолтный вывод вроде <MyClass object at 0x...>.

Когда что использовать

  • Всегда реализуйте __repr__ — это базовый минимум для любого класса.
  • Добавляйте __str__, когда объект показывается пользователю (UI, письма, отчёты).
  • В dataclasses __repr__ генерируется автоматически; можно отключить параметром repr=False.
  • Для логирования используйте repr() — он показывает тип и значения, что помогает при отладке.

Связь с форматированием строк

e = Event("Деплой", datetime(2024, 7, 15, 9, 30))

# !r вызывает repr(), !s — str()
print(f"{e!r}")  # Event(title='Деплой', ...)
print(f"{e!s}")  # Деплой в 2024-07-15 09:30
print(f"{e}")   # Деплой в 2024-07-15 09:30  (по умолчанию __str__)

Подводные камни

  • Если __repr__ не определён, контейнеры (list, dict) покажут адрес памяти вместо содержимого — трудно дебажить.
  • Не путайте !r и !s в f-строках: f"{name!r}" добавляет кавычки вокруг строки, что может сломать вывод.
  • Рекурсивные структуры в __repr__ вызовут RecursionError — добавляйте защиту через флаг или reprlib.repr().
  • В dataclass поле с repr=False исчезает из авто-__repr__, но не из __str__ (если вы его реализовали вручную).
  • Метод __str__ в родительском классе перекрывается в дочернем, только если дочерний явно его переопределяет — неожиданное наследование.
  • Длинный __repr__ при логировании больших объектов может засорить логи; используйте reprlib.repr() для усечения.

Частые вопросы на собеседовании

  • Что такое truthy и falsy значения в Python?
  • Когда использовать threading?
  • Что такое type hints и зачем они нужны?
  • Как работает yield?

Типичные ошибки

  • Описывать str vs repr только как термин и не показывать механизм на минимальном примере.
  • Игнорировать ошибки, пустые данные, конкурентный доступ или границы транзакции.
  • Не связывать поведение с официальным контрактом Python и реальной эксплуатацией.

Что проверяет интервьюер

  • Объясняет str vs repr через последовательность действий, а не через набор ключевых слов.
  • Приводит короткий кодовый пример или production-сценарий с ожидаемым поведением.
  • Называет хотя бы один риск: производительность, безопасность, транзакции, память или сопровождение.

Как вы знаете этот вопрос?

Проверить себя по теме Python →

Источники

  • https://docs.python.org/3/reference/datamodel.html
  • https://docs.python.org/3/howto/descriptor.html

Связанные темы

Pythontechnical-reasoning