uz
Feedback

Firibgarlarga uchmang! Telemetrio bunday kanallarni topadi va belgilaydi 👉 Belgini ko‘rmoqchi bo‘lsangiz, obuna bo‘ling

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

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

Kanalga Telegram’da o‘tish

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

Ko'proq ko'rsatish

📈 Telegram kanali Python | Вопросы собесов analitikasi

Python | Вопросы собесов (@python_easy_ru) Rus til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 12 629 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 9 915-o'rinni va Rossiya mintaqasida 51 035-o'rinni egallagan.

📊 Auditoriya ko‘rsatkichlari va dinamika

невідомо sanasidan buyon loyiha tez o‘sib, 12 629 obunachiga ega bo‘ldi.

16 Oktabr, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni -115 ga, so‘nggi 24 soatda esa -6 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.

  • Tasdiqlash holati: Tasdiqlanmagan
  • Jalb etish (ER): Auditoriya o‘rtacha 6.29% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 4.30% ini tashkil etuvchi reaksiyalarni to‘playdi.
  • Post qamrovi: Har bir post o‘rtacha 794 marta ko‘riladi; birinchi sutkada odatda 543 ta ko‘rish yig‘iladi.
  • Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 2 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:
“Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads”

Yuqori yangilanish chastotasi (oxirgi ma’lumot 17 Oktabr, 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.

12 629
Obunachilar
-624 soatlar
-317 kun
-11530 kun
Postlar arxiv
👩‍💻 Есть опыт в проге, но не растет зп? Может нужно найти крутой оффер? 🗿 Большинство IT специалистов работает за копейки
👩‍💻 Есть опыт в проге, но не растет зп? Может нужно найти крутой оффер? 🗿 Большинство IT специалистов работает за копейки и даже не осознает этого. Лучший способ понять рынок вакансий - стать его частью и начать анализировать. 👍 Предела совершенству нет, что нельзя сказать про зп в рамках одной компании. Подпишись на Мидл работает и повышай свой капитал.

📌 Что такое шаблонный метод (Template method) ? 💬 Спрашивают в 3% собеседований Паттерн "Шаблонный метод" (Template Method) — это поведенческий паттерн проектирования, который определяет скелет алгоритма в методе, оставляя некоторые шаги подклассам. Подклассы могут переопределять эти шаги, не изменяя структуру алгоритма. 🤔 Зачем нужен данный паттерн? 1️⃣ Повторное использование кода: Позволяет повторно использовать общий алгоритм, избегая дублирования кода. 2️⃣ Контроль над структурой алгоритма: Обеспечивает контроль над основной структурой алгоритма, позволяя изменять только определённые его шаги. 3️⃣ Инкапсуляция неизменных частей алгоритма: Позволяет инкапсулировать части алгоритма, которые не должны изменяться, и делать изменяемыми только необходимые шаги. 🤔 Как работает данный паттерн? Паттерн включает следующие компоненты: ➕ Абстрактный класс: Определяет шаблонный метод, который реализует скелет алгоритма, и абстрактные методы для шагов, которые должны быть реализованы в подклассах. ➕ Конкретные подклассы: Реализуют абстрактные методы для конкретных шагов алгоритма.
from abc import ABC, abstractmethod

# Абстрактный класс с шаблонным методом
class Beverage(ABC):
    def prepare_recipe(self):
        self.boil_water()
        self.brew()
        self.pour_in_cup()
        self.add_condiments()

    def boil_water(self):
        print("Boiling water")

    def pour_in_cup(self):
        print("Pouring into cup")

    @abstractmethod
    def brew(self):
        pass

    @abstractmethod
    def add_condiments(self):
        pass

# Конкретный подкласс для кофе
class Coffee(Beverage):
    def brew(self):
        print("Dripping Coffee through filter")

    def add_condiments(self):
        print("Adding Sugar and Milk")

# Конкретный подкласс для чая
class Tea(Beverage):
    def brew(self):
        print("Steeping the tea")

    def add_condiments(self):
        print("Adding Lemon")

# Клиентский код
def prepare_beverage(beverage: Beverage):
    beverage.prepare_recipe()

coffee = Coffee()
tea = Tea()

print("Making coffee:")
prepare_beverage(coffee)

print("\nMaking tea:")
prepare_beverage(tea)
🤔 Преимущества: 1️⃣ Повторное использование кода: Избегает дублирования кода, предоставляя общий алгоритм с изменяемыми шагами. 2️⃣ Инкапсуляция изменений: Изолирует изменяемые части алгоритма в подклассы. 3️⃣ Контроль структуры алгоритма: Обеспечивает строгий контроль над основной структурой алгоритма. 🤔 Недостатки: 1️⃣ Ограниченная гибкость: Если шаблонный метод требует изменения, все подклассы могут нуждаться в изменении. 2️⃣ Усложнение структуры кода: Может привести к созданию большого количества подклассов для реализации различных шагов алгоритма. 🤔 Когда использовать данный паттерн? ➕ Когда требуется использовать один и тот же алгоритм в нескольких подклассах с различиями в отдельных шагах. ➕ Когда необходимо избежать дублирования кода, инкапсулируя изменяемые части алгоритма. ➕ Когда нужно контролировать структуру алгоритма, предоставляя возможность изменять только отдельные его шаги. Паттерн "Шаблонный метод" является мощным инструментом для организации кода и управления алгоритмами, предоставляя возможность изменять отдельные шаги алгоритма без изменения его основной структуры. 🔥 ТОП ВОПРОСОВ С СОБЕСОВ 🔒 База собесов | 🔒 База тестовых

Повышенный гонорар за технические статьи в блог на Хабре Если вы уже автор Хабра или работаете в сфере IT и чувствуете в себе
Повышенный гонорар за технические статьи в блог на Хабре Если вы уже автор Хабра или работаете в сфере IT и чувствуете в себе творческий потенциал, то оставшиеся летние дни — прекрасная возможность посвятить себя писательскому делу! Мы запустили акцию для технических авторов и повысили гонорар за статьи в наш блог на Хабр до 22 000 рублей. Ждем материалы о системном администрировании, программировании, хостинге и серверном оборудовании. Акция действует до 29 августа. Узнать больше #реклама firstvds.ru О рекламодателе

🤔 Какое утверждение верно относительно GIL (Global Interpreter Lock) в CPython?
Anonymous voting

Jobski - твой помощник при поиске работы в IT Сервис индивидуально подбирает вакансии, учитывая ваш опыт, навыки и стек техно
Jobski - твой помощник при поиске работы в IT Сервис индивидуально подбирает вакансии, учитывая ваш опыт, навыки и стек технологий. Узнать больше #реклама jobski.ru О рекламодателе

📌 Что такое паттерн Стратегия (Strategy) ? 💬 Спрашивают в 3% собеседований Паттерн "Стратегия" (Strategy) — это поведенческий паттерн проектирования, который определяет семейство алгоритмов, инкапсулирует каждый из них и делает их взаимозаменяемыми. Паттерн "Стратегия" позволяет изменять алгоритмы независимо от клиентов, которые их используют. 🤔 Зачем нужен данный паттерн? 1️⃣ Изоляция алгоритмов: Позволяет инкапсулировать различные алгоритмы и использовать их независимо. 2️⃣ Упрощение кода: Устраняет дублирование кода и упрощает классы, которые используют эти алгоритмы. 3️⃣ Гибкость и расширяемость: Легко добавлять новые алгоритмы или изменять существующие без изменения клиентского кода. 🤔 Как работает данный паттерн? Паттерн включает следующие компоненты: ➕ Стратегия (Strategy): Интерфейс, определяющий общий метод, который должны реализовать все алгоритмы. ➕ Конкретные стратегии (ConcreteStrategy): Реализации различных алгоритмов, которые реализуют интерфейс стратегии. ➕ Контекст (Context): Класс, использующий стратегию для выполнения задачи.
from abc import ABC, abstractmethod

# Интерфейс стратегии
class Strategy(ABC):
    @abstractmethod
    def sort(self, data):
        pass

# Конкретные стратегии
class BubbleSortStrategy(Strategy):
    def sort(self, data):
        print("Sorting using Bubble Sort")
        for i in range(len(data)):
            for j in range(0, len(data)-i-1):
                if data[j] > data[j+1]:
                    data[j], data[j+1] = data[j+1], data[j]

class QuickSortStrategy(Strategy):
    def sort(self, data):
        print("Sorting using Quick Sort")
        self.quick_sort(data, 0, len(data) - 1)

    def quick_sort(self, data, low, high):
        if low < high:
            pi = self.partition(data, low, high)
            self.quick_sort(data, low, pi - 1)
            self.quick_sort(data, pi + 1, high)

    def partition(self, data, low, high):
        pivot = data[high]
        i = low - 1
        for j in range(low, high):
            if data[j] <= pivot:
                i = i + 1
                data[i], data[j] = data[j], data[i]
        data[i + 1], data[high] = data[high], data[i + 1]
        return i + 1

# Контекст
class SortingContext:
    def __init__(self, strategy: Strategy):
        self._strategy = strategy

    def set_strategy(self, strategy: Strategy):
        self._strategy = strategy

    def sort(self, data):
        self._strategy.sort(data)

# Клиентский код
data = [5, 2, 9, 1, 5, 6]

context = SortingContext(BubbleSortStrategy())
context.sort(data)
print(data)  # [1, 2, 5, 5, 6, 9]

context.set_strategy(QuickSortStrategy())
data = [3, 7, 8, 5, 2, 1, 9, 5, 4]
context.sort(data)
print(data)  # [1, 2, 3, 4, 5, 5, 7, 8, 9]
🤔 Преимущества: 1️⃣ Изоляция алгоритмов: Алгоритмы инкапсулируются в отдельные классы, что упрощает их замену и добавление. 2️⃣ Упрощение кода: Контекст использует стратегии, избегая громоздких условных операторов. 3️⃣ Гибкость и расширяемость: Легко добавлять новые стратегии без изменения существующего кода. Недостатки: 1️⃣ Усложнение структуры кода: Добавление множества классов стратегий может усложнить проект. 2️⃣ Контекст знает о стратегиях: Контекст должен знать о всех возможных стратегиях, чтобы иметь возможность их переключать. 🤔 Когда использовать данный паттерн? ➕ Когда есть несколько вариантов алгоритмов для выполнения задачи. ➕ Когда нужно динамически выбирать алгоритм во время выполнения. ➕ Когда необходимо избежать множества условных операторов для выбора алгоритма. Паттерн "Стратегия" является мощным инструментом для управления алгоритмами и их выбора в зависимости от конкретной ситуации, улучшая гибкость и расширяемость кода. 🔥 ТОП ВОПРОСОВ С СОБЕСОВ 🔒 База собесов | 🔒 База тестовых

🤬 Постоянные ошибки, как они надоели! 🤯 Планируя свои дела, мы забываем, что оборудование может подвести. Это может перекры
🤬 Постоянные ошибки, как они надоели! 🤯 Планируя свои дела, мы забываем, что оборудование может подвести. Это может перекрыть все рабочие планы. Придется гуглить, смотреть видосы, звонить знакомым "Не встречалась ли тебе такая ошибка?" 🥵 Все это время и силы. Наша команда нашла этому решение - Битый код. Канал, который даст тебе базу в мире ошибок. 🍸 Стань тем человеком, к которому будут обращаться и про которого будут говорить "Он сможет помочь"

Методичка: как сделать онлайн-встречи эффективнее Надоело ждать коллег, которые постоянно забывают о встречах, а отсутствие п
Методичка: как сделать онлайн-встречи эффективнее Надоело ждать коллег, которые постоянно забывают о встречах, а отсутствие повестки и потерянные договоренности мешают нормально работать? Команда МТС Линк собрала на 37 страницах полезные материалы, чек-листы и кейсы, которые помогают компаниям проводить эффективные совещания в онлайне с помощью сервиса Встречи. Из методички узнаете: - Как создать постоянную ссылку и подключаться на встречи в 2 клика, - Как делать заметки и работать с файлами, не переживая за качество связи и безопасность данных. - Как облегчает жизнь ИИ, который расшифровывает созвоны в текст и автоматически отправляет расшифровку на почту. Еще в методичке описаны 7 способов оценки текущей эффективности ваших онлайн-встреч. Получить гайд можно бесплатно на сайте. Скачать #реклама mts-link.ru О рекламодателе

🤔 Какой метод используется для вычисления декартова произведения двух списков?
Anonymous voting

📌 Что такое паттерн Состояние (State) ? 💬 Спрашивают в 3% собеседований Паттерн "Состояние" (State) — это поведенческий паттерн проектирования, который позволяет объекту изменять свое поведение в зависимости от его внутреннего состояния. Внешне это выглядит так, как будто объект изменил свой класс. Этот паттерн особенно полезен, когда объект может находиться в нескольких состояниях, каждое из которых определяет его поведение. 🤔 Зачем нужен данный паттерн? 1️⃣ Управление состояниями: Позволяет управлять сложными состояниями объекта, организуя код более структурировано. 2️⃣ Изолирование состояний: Разделяет код, относящийся к разным состояниям, что упрощает его поддержку и модификацию. 3️⃣ Изменение поведения во время выполнения: Объект может динамически изменять своё поведение в зависимости от текущего состояния. 🤔 Как работает данный паттерн? Паттерн включает следующие компоненты: ➕ Контекст (Context): Объект, который содержит ссылку на текущий объект состояния и делегирует ему выполнение поведения. ➕ Состояние (State): Интерфейс или абстрактный класс, определяющий общие методы для всех конкретных состояний. ➕ Конкретные состояния (ConcreteState): Классы, реализующие конкретное поведение в зависимости от состояния.
from abc import ABC, abstractmethod

# Интерфейс состояния
class State(ABC):
    @abstractmethod
    def insert_coin(self, context):
        pass

    @abstractmethod
    def press_button(self, context):
        pass

    @abstractmethod
    def dispense(self, context):
        pass

# Конкретные состояния
class NoCoinState(State):
    def insert_coin(self, context):
        print("Coin inserted.")
        context.state = context.has_coin_state

    def press_button(self, context):
        print("Insert coin first.")

    def dispense(self, context):
        print("Insert coin first.")

class HasCoinState(State):
    def insert_coin(self, context):
        print("Coin already inserted.")

    def press_button(self, context):
        print("Button pressed.")
        context.state = context.sold_state

    def dispense(self, context):
        print("Press button to dispense.")

class SoldState(State):
    def insert_coin(self, context):
        print("Wait! Dispensing in progress.")

    def press_button(self, context):
        print("Wait! Dispensing in progress.")

    def dispense(self, context):
        print("Ticket dispensed.")
        context.state = context.no_coin_state

# Контекст
class TicketMachine:
    def __init__(self):
        self.no_coin_state = NoCoinState()
        self.has_coin_state = HasCoinState()
        self.sold_state = SoldState()
        self.state = self.no_coin_state

    def insert_coin(self):
        self.state.insert_coin(self)

    def press_button(self):
        self.state.press_button(self)

    def dispense(self):
        self.state.dispense(self)

# Клиентский код
machine = TicketMachine()

machine.insert_coin()  # Coin inserted.
machine.press_button() # Button pressed.
machine.dispense()     # Ticket dispensed.

machine.press_button() # Insert coin first.
machine.insert_coin()  # Coin inserted.
machine.dispense()     # Press button to dispense.
machine.press_button() # Button pressed.
machine.dispense()     # Ticket dispensed.
🤔 Преимущества: 1️⃣ Управление состояниями: Упрощает управление сложными состояниями объекта. 2️⃣ Изолирование состояний: Позволяет разделить код, относящийся к разным состояниям. 3️⃣ Динамическое изменение поведения: Объект может динамически изменять своё поведение. 🤔 Недостатки: 1️⃣ Усложнение кода: Добавление большого количества классов состояний может усложнить код. 2️⃣ Повышенные накладные расходы: Частые изменения состояния могут привести к дополнительным накладным расходам. Паттерн "Состояние" является мощным инструментом для управления состояниями объекта и изменением его поведения в зависимости от этих состояний, что упрощает код и улучшает его структуру. 🔥 ТОП ВОПРОСОВ С СОБЕСОВ 🔒 База собесов | 🔒 База тестовых

На эти IT-стажировки берут без опыта В канале собраны самые свежие предложения от крупнейших российских компаний: VK, Сбера,
На эти IT-стажировки берут без опыта В канале собраны самые свежие предложения от крупнейших российских компаний: VK, Сбера, Яндекса и многих других. Теперь можно не откладывать начало карьеры в IT, ведь здесь вы найдете: — стажировки для молодых специалистов; — анонсы хакатонов, которые будут выгодно смотреться в резюме; — карьерные и образовательные ивенты для прокачки hard и soft skills. Подписаться #реклама О рекламодателе

🤔 Что такое list comprehension в Python и для чего оно используется?
Anonymous voting

Такси для бизнеса. Яндекс Go Оптимизируйте свои расходы и повысьте эффективность бизнеса с Яндекс Go Узнать больше #реклама b
Такси для бизнеса. Яндекс Go Оптимизируйте свои расходы и повысьте эффективность бизнеса с Яндекс Go Узнать больше #реклама business.go.yandex О рекламодателе

📌 Что такое Наблюдатель (Observer) ? 💬 Спрашивают в 3% собеседований Паттерн "Наблюдатель" (Observer) — это поведенческий паттерн проектирования, который определяет зависимость "один ко многим" между объектами. Когда состояние одного объекта изменяется, все его зависимые объекты автоматически оповещаются и обновляются. Этот паттерн позволяет объектам подписываться на события, происходящие в другом объекте. 🤔 Зачем нужен данный паттерн? 1️⃣ Обновление состояния: Автоматически оповещает зависимые объекты о изменениях в объекте-наблюдаемом. 2️⃣ Разделение обязанностей: Позволяет разделить логику оповещения и обновления состояния между объектами. 3️⃣ Гибкость и расширяемость: Упрощает добавление новых наблюдателей и изменение их поведения без изменения кода объекта-наблюдаемого. 🤔 Как работает данный паттерн? Паттерн включает следующие компоненты: ➕ Субъект (Subject): Интерфейс или абстрактный класс, определяющий методы для добавления, удаления и оповещения наблюдателей. ➕ Конкретный субъект (ConcreteSubject): Реализация субъекта, хранящая состояние и оповещающая наблюдателей об изменениях. ➕ Наблюдатель (Observer): Интерфейс или абстрактный класс, определяющий метод для обновления состояния в ответ на оповещения. ➕ Конкретный наблюдатель (ConcreteObserver): Реализация наблюдателя, обновляющая своё состояние в ответ на изменения субъекта.
from abc import ABC, abstractmethod

# Интерфейс наблюдателя
class Observer(ABC):
    @abstractmethod
    def update(self, temperature):
        pass

# Конкретный наблюдатель
class TemperatureDisplay(Observer):
    def update(self, temperature):
        print(f"Temperature Display: Temperature updated to {temperature}°C")

class TemperatureAlert(Observer):
    def update(self, temperature):
        if temperature > 30:
            print("Temperature Alert: Temperature is too high!")

# Субъект
class WeatherStation:
    def __init__(self):
        self._observers = []
        self._temperature = None

    def add_observer(self, observer):
        self._observers.append(observer)

    def remove_observer(self, observer):
        self._observers.remove(observer)

    def set_temperature(self, temperature):
        self._temperature = temperature
        self.notify_observers()

    def notify_observers(self):
        for observer in self._observers:
            observer.update(self._temperature)

# Клиентский код
weather_station = WeatherStation()
display = TemperatureDisplay()
alert = TemperatureAlert()

weather_station.add_observer(display)
weather_station.add_observer(alert)

weather_station.set_temperature(25)  # Temperature Display: Temperature updated to 25°C
weather_station.set_temperature(35)  # Temperature Display: Temperature updated to 35°C
                                     # Temperature Alert: Temperature is too high!
🤔 Преимущества: 1️⃣ Автоматическое оповещение: Автоматически обновляет наблюдателей при изменении состояния субъекта. 2️⃣ Разделение обязанностей: Субъект не знает о конкретных наблюдателях и их логике. 3️⃣ Гибкость и расширяемость: Легко добавлять новых наблюдателей и изменять их поведение. 🤔 Недостатки: 1️⃣ Порядок уведомления: Порядок оповещения наблюдателей может быть важен и требует управления. 2️⃣ Потенциальные утечки памяти: Неудаленные наблюдатели могут привести к утечкам памяти. 🤔 Когда использовать данный паттерн? ➕ Когда изменение состояния одного объекта должно приводить к изменению других объектов. ➕ Когда необходимо централизованное оповещение об изменениях состояния. ➕ Когда нужно минимизировать связи между субъектом и наблюдателями. Паттерн "Наблюдатель" является мощным инструментом для управления зависимостями и оповещением в системе, упрощая взаимодействие между объектами и улучшая модульность кода. 🔥 ТОП ВОПРОСОВ С СОБЕСОВ 🔒 База собесов | 🔒 База тестовых

🤔 Что такое итератор в Python?
Anonymous voting

👨‍💻 Джун: Слушай, вот стажировку я прошел, где теперь можно чекнуть вакансии на работу? 🍷 Мидл: Ооо, тебе помогут ребята с
👨‍💻 Джун: Слушай, вот стажировку я прошел, где теперь можно чекнуть вакансии на работу? 🍷 Мидл: Ооо, тебе помогут ребята с канала Джун работает 💯 Карьеру нужно начинать с хорошими работодателями. Твое резюме будет ликовать, ведь контент выходит каждый день, работа ждет тебя, мой друг! 😏 Не упускай возможность и подписывайся, чтобы не потерять

Запустите рекламу в телеграм-каналах с Яндекс Директом Перфоманс-реклама теперь в телеграм-каналах ⚡ Яндекс Директ знает, как
Запустите рекламу в телеграм-каналах с Яндекс Директом Перфоманс-реклама теперь в телеграм-каналах ⚡ Яндекс Директ знает, как привлечь целевую аудиторию 💰👌 Попробовать #реклама yandex.ru О рекламодателе

📌 Что такое хранитель (Memento) ? 💬 Спрашивают в 3% собеседований Паттерн "Хранитель" (Memento) — это поведенческий паттерн проектирования, который позволяет сохранять и восстанавливать состояние объекта, не раскрывая его внутреннюю структуру. Это полезно для реализации функций отмены операций, восстановления предыдущих состояний и создания контрольных точек. 🤔 Зачем нужен данный паттерн? 1️⃣ Отмена и повтор операций: Позволяет легко отменять изменения и возвращаться к предыдущим состояниям. 2️⃣ Сохранение состояния: Позволяет сохранять состояния объектов в определённые моменты времени. 3️⃣ Инкапсуляция состояния: Хранит внутреннее состояние объекта, не нарушая его инкапсуляции. 🤔 Как работает данный паттерн? Паттерн включает следующие компоненты: ➕ Хранитель (Memento): Объект, который сохраняет состояние другого объекта. ➕ Создатель (Originator): Объект, чьё состояние сохраняется и восстанавливается. ➕ Опекун (Caretaker): Объект, который отвечает за хранение хранителей и, при необходимости, предоставляет их создателю для восстановления состояния.
# Хранитель
class Memento:
    def __init__(self, state):
        self._state = state

    def get_state(self):
        return self._state

# Создатель
class TextEditor:
    def __init__(self):
        self._state = ""

    def type(self, text):
        self._state += text

    def save(self):
        return Memento(self._state)

    def restore(self, memento):
        self._state = memento.get_state()

    def get_state(self):
        return self._state

# Опекун
class History:
    def __init__(self):
        self._mementos = []

    def save(self, memento):
        self._mementos.append(memento)

    def undo(self):
        if not self._mementos:
            return None
        return self._mementos.pop()

# Клиентский код
editor = TextEditor()
history = History()

# Пользователь вводит текст
editor.type("Hello, ")
editor.type("world!")
print(editor.get_state())  # Hello, world!

# Сохранение состояния
history.save(editor.save())

# Продолжение ввода текста
editor.type(" How are you?")
print(editor.get_state())  # Hello, world! How are you?

# Восстановление состояния
editor.restore(history.undo())
print(editor.get_state())  # Hello, world!
🤔 Преимущества: 1️⃣ Отмена и восстановление: Легко реализовать функции отмены и восстановления. 2️⃣ Инкапсуляция состояния: Состояние сохраняется и восстанавливается без нарушения инкапсуляции. 3️⃣ Упрощение управления состоянием: Позволяет создавать контрольные точки состояния объекта. 🤔 Недостатки: 1️⃣ Увеличение использования памяти: Сохранение состояния может потребовать значительных ресурсов, особенно для больших объектов. 2️⃣ Сложность управления: В сложных системах может быть трудно управлять множеством состояний и хранителей. 🤔 Когда использовать данный паттерн? ➕ Когда необходимо реализовать функции отмены и восстановления. ➕ Когда нужно сохранять состояние объекта в определённые моменты времени. ➕ Когда важно сохранять состояние объекта, не нарушая его инкапсуляции. Паттерн "Хранитель" является мощным инструментом для управления состоянием объектов, предоставляя возможность сохранять и восстанавливать состояния без раскрытия внутренней структуры объекта. 🔥 ТОП ВОПРОСОВ С СОБЕСОВ 🔒 База собесов | 🔒 База тестовых

📕 Прогер, как ты расширяешь свой кругозор в сфере IT? Не достаточно знать что-то одно, мысля глобально и изучая смежные отра
📕 Прогер, как ты расширяешь свой кругозор в сфере IT? Не достаточно знать что-то одно, мысля глобально и изучая смежные отрасли, ты не только становишься умнее, но и увеличиваешь свою востребованность и свой заработок. 🗿 Не обязательно читать заумные книги и смотреть подкасты - это долго. У нас есть решение: 🔥 Полезные статьи - концентрат знаний. 🔥 Советы - короткие сообщения, которые будут увеличивать твою эффективность. 🔥 Инструменты - tool-сайты в разы упростят и ускорят твою работу. 🧑‍💻 Время, силы, желание - ресурсы, которые нужно использовать с умом. Подпишись на канал Заметки прогера, IT ниша скажет "спасибо" за такого специалиста.

Стажировки и хакатоны для начинающих айтишников Где айтишнику найти стажировку, которая не требует опыта работы? Как узнать,
Стажировки и хакатоны для начинающих айтишников Где айтишнику найти стажировку, которая не требует опыта работы? Как узнать, в каких компаниях не потратишь время зря и научишься чему-то полезному? Подписаться на канал с IT-стажировками, где отбирают самые толковые предложения и делятся: — стажировками для айтишников с минимальным опытом работы или без него; — анонсами хакатонов, которые будут выгодно смотреться в резюме; — карьерными и образовательными ивентами для прокачки hard и soft skills. Подписаться #реклама О рекламодателе