Python | Вопросы собесов
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads
إظهار المزيد📈 نظرة تحليلية على قناة تيليجرام Python | Вопросы собесов
تُعد قناة Python | Вопросы собесов (@python_easy_ru) في القطاع اللغوي الروسية لاعباً نشطاً. يضم المجتمع حالياً 12 631 مشتركاً، محتلاً المرتبة 9 920 في فئة التكنولوجيات والتطبيقات والمرتبة 51 114 في منطقة روسيا.
📊 مؤشرات الجمهور والحراك
منذ تأسيسه في невідомо، حقق المشروع نمواً سريعاً وجمع 12 631 مشتركاً.
بحسب آخر البيانات بتاريخ 15 أكتوبر, 2026، تحافظ القناة على نشاط مستقر. خلال آخر 30 يوماً تغيّر عدد الأعضاء بمقدار -109، وفي آخر 24 ساعة بمقدار 0، مع بقاء الوصول العام مرتفعاً.
- حالة التحقق: غير موثّقة
- معدل التفاعل (ER): يبلغ متوسط تفاعل الجمهور 6.20%. وخلال أول 24 ساعة من النشر يحصد المحتوى عادةً 4.23% من ردود الفعل نسبةً إلى إجمالي المشتركين.
- وصول المنشورات: يحصل كل منشور على متوسط 783 مشاهدة. وخلال اليوم الأول يجمع عادةً 535 مشاهدة.
- التفاعلات والاستجابة: يتفاعل الجمهور بانتظام؛ متوسط التفاعلات لكل منشور يبلغ 3.
- الاهتمامات الموضوعية: يركز المحتوى على مواضيع رئيسية مثل ставь, модуль, строка, docker, alice.
📝 الوصف وسياسة المحتوى
يصف المؤلف القناة بأنها مساحة للتعبير عن الآراء الذاتية:
“Сайт: https://easyoffer.ru/
Все каналы: t.me/+xGeAw6ckJ4liYzQy
Контакт для рекламы: @sendme_ads”
بفضل وتيرة التحديث المرتفعة (أحدث البيانات بتاريخ 16 أكتوبر, 2026) تحافظ القناة على حداثتها ومستوى وصول مرتفع. وتُظهر التحليلات تفاعلاً نشطاً من الجمهور، ما يجعلها نقطة تأثير مهمة ضمن فئة التكنولوجيات والتطبيقات.
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
Ставь 👍 и забирай 📚 Базу знанийclass FileHandler:
def read_file(self, filename):
with open(filename, 'r') as file:
return file.read()
def write_file(self, filename, data):
with open(filename, 'w') as file:
file.write(data)
Функция, выполняющая одну конкретную задачу:
def calculate_sum(numbers):
return sum(numbers)
Преимущества высокой когезии:
🟠Улучшенная читабельность и понятность кода.
🟠Легкость сопровождения и изменения.
🟠Повышенная вероятность повторного использования модулей.
🚩Связность (Coupling)
Связность относится к степени зависимости одного модуля от другого. Высокая связность означает, что модули сильно зависят друг от друга, что делает систему более жесткой и сложной для сопровождения. Низкая связность, напротив, означает, что модули имеют минимальные зависимости друг от друга, что делает систему более гибкой и легко модифицируемой.
Использование интерфейсов или абстракций:
class Database:
def connect(self):
pass
class MySQLDatabase(Database):
def connect(self):
print("Connecting to MySQL database")
class PostgreSQLDatabase(Database):
def connect(self):
print("Connecting to PostgreSQL database")
def initialize_db(db: Database):
db.connect()
db = MySQLDatabase()
initialize_db(db)
Внедрение зависимостей:
class Service:
def __init__(self, repository):
self.repository = repository
def perform_action(self):
self.repository.save("Some data")
class Repository:
def save(self, data):
print(f"Saving {data}")
repository = Repository()
service = Service(repository)
service.perform_action()
Преимущества низкой связности:
🟠 Легкость сопровождения и тестирования.
🟠 Улучшенная гибкость и расширяемость системы.
🟠 Возможность повторного использования модулей в разных контекстах.
Ставь 👍 и забирай 📚 Базу знанийclass A:
def say_hello(self):
print("Hello from A")
class B:
def say_hello(self):
print("Hello from B")
class C(A, B):
pass
c = C()
c.say_hello()
🚩Порядок разрешения методов (MRO)
В примере выше класс C наследует от классов A и B. Метод say_hello есть в обоих родительских классах. Порядок разрешения методов в классе C будет таким: C -> A -> B. Чтобы увидеть MRO, можно использовать метод __mro__ или функцию mro():
print(C.__mro__)
# (<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)
print(C.mro())
# [<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>]
Таким образом, при вызове c.say_hello() будет вызван метод say_hello класса A, так как он идет первым в MRO.
🚩Пример с переопределением метода в дочернем классе
Если вы переопределите метод в дочернем классе, то будет вызван метод, определенный в самом дочернем классе:
class A:
def say_hello(self):
print("Hello from A")
class B:
def say_hello(self):
print("Hello from B")
class C(A, B):
def say_hello(self):
print("Hello from C")
c = C()
c.say_hello()
# Вывод: Hello from C
🚩Вызов методов родительских классов с использованием super()
Иногда необходимо явно вызвать метод одного из родительских классов. Для этого используется функция super(), которая возвращает объект, через который можно вызывать методы родительского класса.
class A:
def say_hello(self):
print("Hello from A")
class B:
def say_hello(self):
print("Hello from B")
class C(A, B):
def say_hello(self):
super().say_hello()
print("Hello from C")
c = C()
c.say_hello()
# Вывод:
# Hello from A
# Hello from C
🚩Вызов методов конкретных родительских классов
Можно вызвать его напрямую через имя класса:
class A:
def say_hello(self):
print("Hello from A")
class B:
def say_hello(self):
print("Hello from B")
class C(A, B):
def say_hello(self):
A.say_hello(self)
B.say_hello(self)
print("Hello from C")
c = C()
c.say_hello()
# Вывод:
# Hello from A
# Hello from B
# Hello from C
Ставь 👍 и забирай 📚 Базу знаний