Python | Вопросы собесов
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads
Больше📈 Аналитический обзор Telegram-канала 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) канал поддерживает актуальность и высокий уровень охвата публикаций. Аналитика показывает, что аудитория активно взаимодействует с контентом, что делает его важной точкой влияния в категории Технологии и приложения.
class MyClass:
def public_method(self):
print("This is a public method")
# Создание экземпляра класса
obj = MyClass()
# Вызов публичного метода
obj.public_method() # This is a public method
🟠Примеры использования публичных методов
Внутри класса
Публичные методы можно вызывать из других методов того же класса, используя self.
class MyClass:
def public_method(self):
print("This is a public method")
def another_method(self):
print("Calling public_method from another_method")
self.public_method()
# Создание экземпляра класса
obj = MyClass()
# Вызов метода, который вызывает другой публичный метод
obj.another_method()
# Output:
# Calling public_method from another_method
# This is a public method
Внешний вызов
Публичные методы можно вызывать из внешнего кода, создавая экземпляр класса и обращаясь к методу через этот экземпляр.
class MyClass:
def public_method(self):
print("This is a public method")
# Создание экземпляра класса
obj = MyClass()
# Вызов публичного метода
obj.public_method() # This is a public method
Ставь 👍 и забирай 📚 Базу знаний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
Использование декоратора
def singleton(cls):
instances = {}
def get_instance(*args, **kwargs):
if cls not in instances:
instances[cls] = cls(*args, **kwargs)
return instances[cls]
return get_instance
@singleton
class Singleton:
pass
# Пример использования
singleton1 = Singleton()
singleton2 = Singleton()
print(singleton1 is singleton2) # True
Использование метакласса
class SingletonMeta(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super(SingletonMeta, cls).__call__(*args, **kwargs)
return cls._instances[cls]
class Singleton(metaclass=SingletonMeta):
pass
# Пример использования
singleton1 = Singleton()
singleton2 = Singleton()
print(singleton1 is singleton2) # True
Использование модуля (встроенная реализация Singleton)
# module_singleton.py
class Singleton:
pass
singleton = Singleton()
# Пример использования
import module_singleton
singleton1 = module_singleton.singleton
singleton2 = module_singleton.singleton
print(singleton1 is singleton2) # True
Ставь 👍 и забирай 📚 Базу знанийimport unittest
def add(a, b):
return a + b
class TestAddFunction(unittest.TestCase):
def test_add_positive_numbers(self):
self.assertEqual(add(2, 3), 5)
def test_add_negative_numbers(self):
self.assertEqual(add(-1, -1), -2)
if __name__ == '__main__':
unittest.main()
🟠Интеграционные тесты (Integration Tests)
Интеграционные тесты проверяют взаимодействие между различными модулями или компонентами системы, чтобы убедиться, что они работают вместе правильно.
import unittest
class Database:
def connect(self):
return "Connected to database"
class Application:
def __init__(self):
self.db = Database()
def start(self):
return self.db.connect()
class TestApplication(unittest.TestCase):
def test_application_start(self):
app = Application()
self.assertEqual(app.start(), "Connected to database")
if __name__ == '__main__':
unittest.main()
🟠Функциональные тесты (Functional Tests)
Функциональные тесты проверяют конкретные функции и их соответствие требованиям. Эти тесты обычно основаны на спецификациях и проверяют, правильно ли выполняется функция.
def login(username, password):
if username == "admin" and password == "secret":
return "Login successful"
else:
return "Login failed"
class TestLoginFunction(unittest.TestCase):
def test_valid_login(self):
self.assertEqual(login("admin", "secret"), "Login successful")
def test_invalid_login(self):
self.assertEqual(login("user", "password"), "Login failed")
if __name__ == '__main__':
unittest.main()
🟠Системные тесты (System Tests)
Системные тесты проверяют всю систему в целом, проверяя все компоненты и функции вместе в интегрированной среде.
class SystemTest(unittest.TestCase):
def test_system(self):
app = Application()
result = app.start()
self.assertEqual(result, "Connected to database")
self.assertEqual(login("admin", "secret"), "Login successful")
if __name__ == '__main__':
unittest.main()
🟠Приемочные тесты (Acceptance Tests)
Приемочные тесты проверяют систему на соответствие бизнес-требованиям и ожиданиям пользователя. Эти тесты часто проводятся пользователями или командой контроля качества.
Ставь 👍 и забирай 📚 Базу знанийself).
class Dog:
def __init__(self, name):
self.name = name # Атрибут объекта
def bark(self):
return f"{self.name} says woof!"
dog = Dog("Buddy")
print(dog.bark()) # Buddy says woof!
🟠Методы класса (Class Methods)
Методы класса работают с самим классом, а не с экземплярами. Они принимают первым аргументом ссылку на класс (cls). Для создания метода класса используется декоратор @classmethod.
class Dog:
species = "Canis lupus familiaris" # Атрибут класса
@classmethod
def get_species(cls):
return cls.species
print(Dog.get_species()) # Canis lupus familiaris
🟠Статические методы (Static Methods)
Статические методы не зависят ни от экземпляра класса, ни от самого класса. Они не получают автоматически ни ссылку на экземпляр (self), ни ссылку на класс (cls). Для создания статического метода используется декоратор @staticmethod.
class Dog:
@staticmethod
def is_domesticated():
return True
print(Dog.is_domesticated()) # True
🟠Магические методы (Dunder Methods)
Магические методы (или dunder методы, от "double underscore") определяют специальные поведения объектов, такие как инициализация, строковое представление, перегрузка операторов и другие. Они имеют двойное подчеркивание в начале и в конце имени.
Некоторые распространенные магические методы:
__init__: Инициализация объекта.
__str__: Строковое представление объекта.
__repr__: Официальное строковое представление объекта, используемое для отладки.
__len__: Определяет длину объекта.
__add__: Перегружает оператор сложения.
class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"{self.name} is {self.age} years old"
dog = Dog("Buddy", 2)
print(dog) # Buddy is 2 years old
Ставь 👍 и забирай 📚 Базу знанийabc (Abstract Base Classes). Абстрактный класс не может быть инстанцирован и предназначен для создания шаблонов, которые должны быть реализованы в подклассах.
🚩Шаги
1⃣Импортирование модуля `abc`
Для использования абстрактных классов и методов нужно импортировать модуль abc.
2⃣Создание абстрактного класса
Абстрактный класс должен наследоваться от ABC (абстрактный базовый класс), который предоставляется модулем abc.
3⃣Определение абстрактных методов
Абстрактные методы обозначаются декоратором @abstractmethod. Эти методы должны быть реализованы в подклассах, иначе они тоже станут абстрактными.
from abc import ABC, abstractmethod
# Создание абстрактного класса
class Animal(ABC):
@abstractmethod
def make_sound(self):
pass
@abstractmethod
def move(self):
pass
# Попытка создания экземпляра абстрактного класса приведет к ошибке
# animal = Animal() # TypeError: Can't instantiate abstract class Animal with abstract methods make_sound, move
# Создание подклассов, которые реализуют абстрактные методы
class Dog(Animal):
def make_sound(self):
return "Woof"
def move(self):
return "Runs"
class Bird(Animal):
def make_sound(self):
return "Tweet"
def move(self):
return "Flies"
# Теперь можно создать экземпляры подклассов
dog = Dog()
print(dog.make_sound()) # Woof
print(dog.move()) # Runs
bird = Bird()
print(bird.make_sound()) # Tweet
print(bird.move()) # Flies
Ставь 👍 и забирай 📚 Базу знаний__del__(). Деструктор используется для выполнения операций очистки, таких как освобождение ресурсов или выполнение завершающих действий перед тем, как объект будет удален из памяти.
🚩Определение и использование деструктора
Определяется внутри класса с помощью метода __del__().
class FileManager:
def __init__(self, filename):
self.file = open(filename, 'w')
print(f"Файл {filename} открыт для записи.")
def write_data(self, data):
self.file.write(data)
def __del__(self):
self.file.close()
print("Файл закрыт.")
🟠Класс FileManager имеет конструктор __init__(), который открывает файл для записи.
🟠Метод write_data() записывает данные в файл.
🟠Деструктор __del__() закрывает файл, когда объект FileManager уничтожается.
🚩Создание и уничтожение объекта
Когда объект класса создается, вызывается конструктор. Когда объект больше не нужен, вызывается деструктор:
manager = FileManager('example.txt')
manager.write_data('Hello, world!')
# Когда объект manager больше не нужен, вызывается деструктор и файл закрывается
🚩Важные замечания
🟠Сборка мусора
Python использует механизм сборки мусора для автоматического управления памятью. Когда объект больше не используется (например, нет активных ссылок на него), сборщик мусора удаляет объект и вызывает его деструктор.
🟠Неопределенное время вызова
Точное время вызова деструктора зависит от работы сборщика мусора. Это означает, что нельзя гарантировать момент вызова деструктора. Поэтому для критических операций лучше использовать явное управление ресурсами, например, с помощью контекстных менеджеров (with).
🟠Контекстные менеджеры
Для явного управления ресурсами и их освобождения в предсказуемый момент лучше использовать контекстные менеджеры.
with open('example.txt', 'w') as file:
file.write('Hello, world!')
# Файл автоматически закрывается после выхода из блока with
Ставь 👍 и забирай 📚 Базу знанийx = [1, 2, 3]
print(type(x)) # <class 'list'>
print(dir(x)) # Выводит все методы и атрибуты объекта списка
2⃣Проверка наличия и получение атрибутов и методов
class MyClass:
def __init__(self, value):
self.value = value
def my_method(self):
return "Hello, world!"
obj = MyClass(10)
# Проверка наличия атрибута
print(hasattr(obj, 'value')) # True
# Получение значения атрибута
print(getattr(obj, 'value')) # 10
# Установка значения атрибута
setattr(obj, 'value', 20)
print(getattr(obj, 'value')) # 20
# Проверка наличия метода
print(hasattr(obj, 'my_method')) # True
# Вызов метода
method = getattr(obj, 'my_method')
print(method()) # Hello, world!
3⃣Динамическое создание объектов и вызов методов
class MyClass:
def __init__(self, value):
self.value = value
def my_method(self):
return f"Value is {self.value}"
# Динамическое создание объекта
klass = globals()['MyClass']
obj = klass(42)
# Динамический вызов метода
method = getattr(obj, 'my_method')
print(method()) # Value is 42
4⃣Использование модуля inspect
import inspect
def my_function(param1, param2):
pass
# Получение информации о параметрах функции
signature = inspect.signature(my_function)
for param in signature.parameters.values():
print(param.name, param.default, param.annotation)
# Получение всех методов класса
class MyClass:
def method(self):
pass
methods = inspect.getmembers(MyClass, predicate=inspect.isfunction)
print(methods) # [('method', <function MyClass.method at 0x...>)]
🚩Плюсы
➕Гибкость
Позволяет писать более общие и гибкие функции, которые могут работать с различными типами данных.
➕Отладка и тестирование
Облегчает отладку и тестирование кода, предоставляя средства для анализа объектов и их состояния.
➕Динамичность
Позволяет адаптировать поведение программы во время выполнения в зависимости от контекста и условий.
🚩Минусы
➖Сложность
Может сделать код более сложным для понимания и сопровождения.
➖Производительность
Рефлексия может повлиять на производительность, особенно при частом использовании в критически важных участках кода.
➖Безопасность
Использование рефлексии может открыть доступ к внутренним частям объектов, что может быть потенциально опасным при неправильном использовании.
Ставь 👍 и забирай 📚 Базу знаний