Python | Вопросы собесов
Сайт: 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 635 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 9 920-o'rinni va Rossiya mintaqasida 51 114-o'rinni egallagan.
📊 Auditoriya ko‘rsatkichlari va dinamika
невідомо sanasidan buyon loyiha tez o‘sib, 12 635 obunachiga ega bo‘ldi.
15 Oktabr, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni -109 ga, so‘nggi 24 soatda esa 0 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.
- Tasdiqlash holati: Tasdiqlanmagan
- Jalb etish (ER): Auditoriya o‘rtacha 6.20% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 4.23% ini tashkil etuvchi reaksiyalarni to‘playdi.
- Post qamrovi: Har bir post o‘rtacha 783 marta ko‘riladi; birinchi sutkada odatda 535 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:
“Сайт: https://easyoffer.ru/
Все каналы: t.me/+xGeAw6ckJ4liYzQy
Контакт для рекламы: @sendme_ads”
Yuqori yangilanish chastotasi (oxirgi ma’lumot 16 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.
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...>)]
🚩Плюсы
➕Гибкость
Позволяет писать более общие и гибкие функции, которые могут работать с различными типами данных.
➕Отладка и тестирование
Облегчает отладку и тестирование кода, предоставляя средства для анализа объектов и их состояния.
➕Динамичность
Позволяет адаптировать поведение программы во время выполнения в зависимости от контекста и условий.
🚩Минусы
➖Сложность
Может сделать код более сложным для понимания и сопровождения.
➖Производительность
Рефлексия может повлиять на производительность, особенно при частом использовании в критически важных участках кода.
➖Безопасность
Использование рефлексии может открыть доступ к внутренним частям объектов, что может быть потенциально опасным при неправильном использовании.
Ставь 👍 и забирай 📚 Базу знаний