Python | Вопросы собесов
Cайт: easyoffer.ru Реклама: @easyoffer_adv ВП: @easyoffer_vp Тесты t.me/+20tRfhrwPpM4NDQy Задачи t.me/+nsl4meWmhfQwNDVi Вакансии t.me/+cXGKkrOY2-w3ZTky
Ko'proq ko'rsatish📈 Telegram kanali Python | Вопросы собесов analitikasi
Python | Вопросы собесов (@python_easy_ru) Rus til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 13 104 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 9 734-o'rinni va Rossiya mintaqasida 50 704-o'rinni egallagan.
📊 Auditoriya ko‘rsatkichlari va dinamika
невідомо sanasidan buyon loyiha tez o‘sib, 13 104 obunachiga ega bo‘ldi.
10 Iyun, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni -55 ga, so‘nggi 24 soatda esa 1 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.
- Tasdiqlash holati: Tasdiqlanmagan
- Jalb etish (ER): Auditoriya o‘rtacha 8.86% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 5.51% ini tashkil etuvchi reaksiyalarni to‘playdi.
- Post qamrovi: Har bir post o‘rtacha 1 161 marta ko‘riladi; birinchi sutkada odatda 722 ta ko‘rish yig‘iladi.
- Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 3 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:
“Cайт: easyoffer.ru
Реклама: @easyoffer_adv
ВП: @easyoffer_vp
Тесты t.me/+20tRfhrwPpM4NDQy
Задачи t.me/+nsl4meWmhfQwNDVi
Вакансии t.me/+cXGKkrOY2-w3ZTky”
Yuqori yangilanish chastotasi (oxirgi ma’lumot 11 Iyun, 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.
class EuropeanSocketInterface:
def voltage(self):
pass
def live(self):
pass
def neutral(self):
pass
def earth(self):
pass
class USASocket:
def voltage(self):
return 120
def live(self):
return 1
def neutral(self):
return -1
Создание адаптера
class Adapter(EuropeanSocketInterface):
def __init__(self, usa_socket):
self.usa_socket = usa_socket
def voltage(self):
return self.usa_socket.voltage()
def live(self):
return self.usa_socket.live()
def neutral(self):
return self.usa_socket.neutral()
def earth(self):
return 0 # В американских розетках может не быть заземления
Использование адаптера
def client_code(socket):
print(f"Voltage: {socket.voltage()}V")
print(f"Live: {socket.live()}")
print(f"Neutral: {socket.neutral()}")
print(f"Earth: {socket.earth()}")
# Использование
usa_socket = USASocket()
adapter = Adapter(usa_socket)
client_code(adapter)
🚩Плюсы
➕Совместимость: Позволяет объектам с несовместимыми интерфейсами работать вместе.
➕Простота интеграции: Упрощает интеграцию старого кода с новым, минимизируя изменения.
➕Гибкость: Позволяет изменять и расширять существующие классы без изменения их исходного кода.
🚩Минусы
➖Сложность: Может добавить дополнительный уровень абстракции, что может усложнить систему.
➖Зависимость: Адаптер может зависеть от конкретных деталей реализации адаптируемого интерфейса.
🚩Разновидности паттерна "Адаптер"
Объектный адаптер: Использует композицию для оборачивания объекта.
Классовый адаптер: Использует множественное наследование для адаптации одного интерфейса к другому.
Пример классового адаптера:
class USASocket:
def voltage(self):
return 120
def live(self):
return 1
def neutral(self):
return -1
class EuropeanSocketInterface:
def voltage(self):
pass
def live(self):
pass
def neutral(self):
pass
def earth(self):
pass
class Adapter(EuropeanSocketInterface, USASocket):
def earth(self):
return 0 # В американских розетках может не быть заземления
# Использование
adapter = Adapter()
client_code(adapter)
Ставь 👍 и забирай 📚 Базу знанийclass EuropeanSocket:
def voltage(self):
return 230
class USASocket:
def voltage(self):
return 120
class Adapter:
def __init__(self, socket):
self.socket = socket
def voltage(self):
return self.socket.voltage()
# Использование
european_socket = EuropeanSocket()
adapter = Adapter(european_socket)
print(adapter.voltage()) # 230
Мост (Bridge)
Паттерн Мост разделяет абстракцию и реализацию, позволяя изменять их независимо друг от друга.
class DrawingAPI:
def draw_circle(self, x, y, radius):
pass
class DrawingAPI1(DrawingAPI):
def draw_circle(self, x, y, radius):
print(f"API1.circle at {x}:{y} radius {radius}")
class DrawingAPI2(DrawingAPI):
def draw_circle(self, x, y, radius):
print(f"API2.circle at {x}:{y} radius {radius}")
class Shape:
def __init__(self, drawing_api):
self.drawing_api = drawing_api
def draw(self):
pass
class CircleShape(Shape):
def __init__(self, x, y, radius, drawing_api):
super().__init__(drawing_api)
self.x = x
self.y = y
self.radius = radius
def draw(self):
self.drawing_api.draw_circle(self.x, self.y, self.radius)
# Использование
circle1 = CircleShape(1, 2, 3, DrawingAPI1())
circle2 = CircleShape(5, 7, 11, DrawingAPI2())
circle1.draw() # API1.circle at 1:2 radius 3
circle2.draw() # API2.circle at 5:7 radius 11
Компоновщик (Composite)
Паттерн Компоновщик позволяет группировать объекты в древовидные структуры для представления иерархий "часть-целое".
class Component:
def operation(self):
pass
class Leaf(Component):
def operation(self):
return "Leaf"
class Composite(Component):
def __init__(self):
self.children = []
def add(self, component):
self.children.append(component)
def operation(self):
results = []
for child in self.children:
results.append(child.operation())
return f"Branch({'+'.join(results)})"
# Использование
leaf1 = Leaf()
leaf2 = Leaf()
composite = Composite()
composite.add(leaf1)
composite.add(leaf2)
print(composite.operation()) # Branch(Leaf+Leaf)
Ставь 👍 и забирай 📚 Базу знанийclone(), позволяющий клонировать объект.
🟠Конкретный прототип (Concrete Prototype): Реализация интерфейса прототипа, которая определяет, как должен быть клонирован объект.
🟠Клиент (Client): Объект, который создает новые объекты, вызывая метод clone() на прототипах.
🚩Плюсы
➕Скорость создания объектов: Клонирование объектов может быть быстрее, чем создание новых с нуля, особенно если процесс создания объектов сложен.
➕Уменьшение зависимости от конкретных классов: Клиенты могут работать с интерфейсом прототипа вместо работы с конкретными классами.
➕Упрощение добавления и удаления объектов: Легко создавать новые типы объектов путем клонирования существующих.
🚩Минусы
➖Сложность реализации: Реализация клонирования может быть сложной, особенно если объект имеет сложные зависимости или использует ресурсы, которые не могут быть просто скопированы.
➖Проблемы с глубоким и поверхностным копированием: Нужно тщательно продумать, как должны копироваться вложенные объекты (глубокое копирование или поверхностное копирование).
🚩Пример
Определение интерфейса прототипа
from abc import ABC, abstractmethod
import copy
class Shape(ABC):
def __init__(self, id):
self.id = id
@abstractmethod
def clone(self):
pass
Создание конкретных прототипов
class Rectangle(Shape):
def __init__(self, id, width, height):
super().__init__(id)
self.width = width
self.height = height
def clone(self):
return copy.deepcopy(self)
def __str__(self):
return f"Rectangle(id={self.id}, width={self.width}, height={self.height})"
class Circle(Shape):
def __init__(self, id, radius):
super().__init__(id)
self.radius = radius
def clone(self):
return copy.deepcopy(self)
def __str__(self):
return f"Circle(id={self.id}, radius={self.radius})"
Использование прототипа
def main():
rect1 = Rectangle(1, 10, 20)
circle1 = Circle(2, 15)
rect2 = rect1.clone()
circle2 = circle1.clone()
print(rect1) # Rectangle(id=1, width=10, height=20)
print(rect2) # Rectangle(id=1, width=10, height=20)
print(circle1) # Circle(id=2, radius=15)
print(circle2) # Circle(id=2, radius=15)
if __name__ == "__main__":
main()
Ставь 👍 и забирай 📚 Базу знанийfrom abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def speak(self):
pass
Создание конкретных продуктов
class Dog(Animal):
def speak(self):
return "Woof!"
class Cat(Animal):
def speak(self):
return "Meow!"
Определение создателя
class AnimalFactory(ABC):
@abstractmethod
def create_animal(self) -> Animal:
pass
def some_operation(self) -> str:
animal = self.create_animal()
return f"The animal says: {animal.speak()}"
Создание конкретных создателей
class DogFactory(AnimalFactory):
def create_animal(self) -> Animal:
return Dog()
class CatFactory(AnimalFactory):
def create_animal(self) -> Animal:
return Cat()
Использование фабричного метода
def client_code(factory: AnimalFactory):
print(factory.some_operation())
dog_factory = DogFactory()
cat_factory = CatFactory()
print("Client: Testing client code with DogFactory:")
client_code(dog_factory) # Вывод: The animal says: Woof!
print("\nClient: Testing client code with CatFactory:")
client_code(cat_factory) # Вывод: The animal says: Meow!
🚩Плюсы
➕Изоляция конкретных классов: Клиентский код работает с интерфейсами или абстрактными классами, а не с конкретными реализациями.
➕Упрощение добавления новых продуктов: Легко добавлять новые виды продуктов, создавая новые конкретные создатели.
➕Гибкость и расширяемость: Позволяет изменять способ создания объектов без изменения клиентского кода.
🚩Минусы
➖Усложнение кода: Может потребоваться создание большого количества классов для каждого конкретного продукта и его создателя.
➖Дополнительные абстракции: Для каждого типа продукта требуется создание интерфейсов или абстрактных классов.
Ставь 👍 и забирай 📚 Базу знанийclass House:
def __init__(self):
self.walls = None
self.roof = None
self.windows = None
def __str__(self):
return f"House with {self.walls} walls, {self.roof} roof, and {self.windows} windows."
🟠Определение интерфейса строителя
from abc import ABC, abstractmethod
class HouseBuilder(ABC):
@abstractmethod
def build_walls(self):
pass
@abstractmethod
def build_roof(self):
pass
@abstractmethod
def build_windows(self):
pass
@abstractmethod
def get_house(self):
pass
🟠Создание конкретных строителей
class ConcreteHouseBuilder(HouseBuilder):
def __init__(self):
self.house = House()
def build_walls(self):
self.house.walls = "brick"
return self
def build_roof(self):
self.house.roof = "tile"
return self
def build_windows(self):
self.house.windows = "double-glazed"
return self
def get_house(self):
return self.house
🟠Создание директора (опционально)
class Director:
def __init__(self, builder):
self.builder = builder
def construct_house(self):
self.builder.build_walls().build_roof().build_windows()
return self.builder.get_house()
🟠Использование паттерна "Строитель"
# Использование без директора
builder = ConcreteHouseBuilder()
house = builder.build_walls().build_roof().build_windows().get_house()
print(house) # House with brick walls, tile roof, and double-glazed windows.
# Использование с директором
director = Director(builder)
house = director.construct_house()
print(house) # House with brick walls, tile roof, and double-glazed windows.
🚩Преимущества паттерна "Строитель"
🟠 Упрощение создания сложных объектов: Позволяет создавать сложные объекты пошагово.
🟠Отделение процесса конструирования от представления: Разделяет логику создания объекта и его состав.
🟠 Гибкость: Один и тот же процесс построения можно использовать для создания различных представлений объекта.
🚩Недостатки паттерна "Строитель"
🟠Усложнение кода: Добавление дополнительных классов может усложнить структуру программы.
🟠Необходимость в дополнительных классах: Для каждого типа объекта требуется отдельный класс строителя.
Ставь 👍 и забирай 📚 Базу знанийfrom abc import ABC, abstractmethod
class Button(ABC):
@abstractmethod
def click(self):
pass
class Checkbox(ABC):
@abstractmethod
def check(self):
pass
Создание конкретных продуктов
class WindowsButton(Button):
def click(self):
print("Windows button clicked")
class MacOSButton(Button):
def click(self):
print("MacOS button clicked")
class WindowsCheckbox(Checkbox):
def check(self):
print("Windows checkbox checked")
class MacOSCheckbox(Checkbox):
def check(self):
print("MacOS checkbox checked")
Создание абстрактной фабрики
class GUIFactory(ABC):
@abstractmethod
def create_button(self) -> Button:
pass
@abstractmethod
def create_checkbox(self) -> Checkbox:
pass
Создание конкретных фабрик
class WindowsFactory(GUIFactory):
def create_button(self) -> Button:
return WindowsButton()
def create_checkbox(self) -> Checkbox:
return WindowsCheckbox()
class MacOSFactory(GUIFactory):
def create_button(self) -> Button:
return MacOSButton()
def create_checkbox(self) -> Checkbox:
return MacOSCheckbox()
Использование абстрактной фабрики
def client_code(factory: GUIFactory):
button = factory.create_button()
checkbox = factory.create_checkbox()
button.click()
checkbox.check()
# Клиентский код может работать с любыми фабриками и продуктами
windows_factory = WindowsFactory()
macos_factory = MacOSFactory()
print("Client: Testing client code with Windows factory:")
client_code(windows_factory)
print("\nClient: Testing client code with MacOS factory:")
client_code(macos_factory)
🚩Преимущества абстрактной фабрики
🟠Изоляция конкретных классов: Клиентский код работает только с интерфейсами или абстрактными классами.
🟠Легкость замены семейств продуктов: Можно легко менять фабрики, чтобы использовать другие семейства продуктов.
🟠Согласованность продуктов: Абстрактная фабрика гарантирует, что продукты одного семейства будут совместимы между собой.
🚩Недостатки абстрактной фабрики
🟠Усложнение кода: Добавление новых классов и интерфейсов может усложнить структуру кода.
🟠Трудности расширения: При добавлении нового типа продукта может потребоваться изменение интерфейсов и всех конкретных фабрик.
Ставь 👍 и забирай 📚 Базу знанийclass Singleton:
_instance = None
def __new__(cls, *args, **kwargs):
if not cls._instance:
cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)
return cls._instance
singleton1 = Singleton()
singleton2 = Singleton()
print(singleton1 is singleton2) # True
Фабричный метод (Factory Method): Фабричный метод определяет интерфейс для создания объекта, но позволяет подклассам изменять тип создаваемых объектов.
class Animal:
def speak(self):
raise NotImplementedError("Subclass must implement abstract method")
class Dog(Animal):
def speak(self):
return "Woof!"
class Cat(Animal):
def speak(self):
return "Meow!"
class AnimalFactory:
@staticmethod
def get_animal(animal_type):
if animal_type == "dog":
return Dog()
elif animal_type == "cat":
return Cat()
else:
return None
dog = AnimalFactory.get_animal("dog")
cat = AnimalFactory.get_animal("cat")
print(dog.speak()) # Woof!
print(cat.speak()) # Meow!
Абстрактная фабрика (Abstract Factory): Абстрактная фабрика предоставляет интерфейс для создания семейств связанных или зависимых объектов без указания их конкретных классов.
class Dog:
def speak(self):
return "Woof!"
class Cat:
def speak(self):
return "Meow!"
class PetFactory:
def create_dog(self):
return Dog()
def create_cat(self):
return Cat()
factory = PetFactory()
dog = factory.create_dog()
cat = factory.create_cat()
print(dog.speak()) # Woof!
print(cat.speak()) # Meow!
Строитель (Builder): Паттерн Строитель используется для создания сложных объектов пошагово. Он позволяет создавать разные представления объекта, используя один и тот же код.
class House:
def __init__(self):
self.walls = None
self.roof = None
self.windows = None
def __str__(self):
return f"House with {self.walls} walls, {self.roof} roof, and {self.windows} windows."
class HouseBuilder:
def __init__(self):
self.house = House()
def build_walls(self, walls):
self.house.walls = walls
return self
def build_roof(self, roof):
self.house.roof = roof
return self
def build_windows(self, windows):
self.house.windows = windows
return self
def build(self):
return self.house
builder = HouseBuilder()
house = builder.build_walls("brick").build_roof("tile").build_windows("double-glazed").build()
print(house)
# House with brick walls, tile roof, and double-glazed windows.
Прототип (Prototype): Паттерн Прототип создает новые объекты путем копирования существующих экземпляров (прототипов).
import copy
class Prototype:
def __init__(self, value):
self.value = value
def clone(self):
return copy.deepcopy(self)
original = Prototype(10)
clone = original.clone()
print(original.value) # 10
print(clone.value) # 10
clone.value = 20
print(original.value) # 10
print(clone.value) # 20
Ставь 👍 и забирай 📚 Базу знаний
Endi mavjud! Telegram Tadqiqoti 2025 — yilning asosiy insaytlari 
