cookie

نحن نستخدم ملفات تعريف الارتباط لتحسين تجربة التصفح الخاصة بك. بالنقر على "قبول الكل"، أنت توافق على استخدام ملفات تعريف الارتباط.

avatar

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

Разбираем вопросы с собеседований на Python разработчика. Django, Flask, FastApi Сайт: easyoffer.ru Реклама: @easyoffer_adv Решай тесты - https://t.me/+_34GCnTeJhFlNWEy Готовься к собесам - https://t.me/+DJ4QbkWKFQAxZWZi https://t.me/+BZJGOFky1ORjOGQ6

إظهار المزيد
مشاركات الإعلانات
11 653
المشتركون
لا توجد بيانات24 ساعات
+47 أيام
+3330 أيام

جاري تحميل البيانات...

معدل نمو المشترك

جاري تحميل البيانات...

📌 Что такое cls? 💬 Спрашивают в 3% собеседований В Python cls — это конвенциональное имя, используемое в методах классов для обозначения самого класса. Оно аналогично self, который используется для обозначения экземпляра класса в методах экземпляра. 🤔 Использование `cls` в методах класса Методы класса (class methods) — это методы, которые получают сам класс в качестве первого аргумента вместо экземпляра класса. Такие методы определяются с использованием декоратора @classmethod. 🤔 Пример метода класса
class MyClass:
    class_attribute = "Классовый атрибут"

    def __init__(self, value):
        self.instance_attribute = value  # Атрибут экземпляра

    @classmethod
    def class_method(cls):
        return cls.class_attribute

# Вызов метода класса
print(MyClass.class_method())  # Вывод: "Классовый атрибут"
🤔 Зачем нужен `cls` 1️⃣Доступ к классовым атрибутам и методам: Используя cls, вы можете получить доступ к атрибутам и методам самого класса. 2️⃣Изменение поведения класса: cls позволяет создавать методы, которые могут работать с классом, а не с конкретным экземпляром, что полезно для задач, связанных с настройкой или инициализацией классовых атрибутов. 3️⃣Создание альтернативных конструкторов: С помощью cls можно создавать альтернативные конструкторы, которые возвращают экземпляры класса различными способами. 🤔 Пример альтернативного конструктора ```python class MyClass: def init(self, value): self.value = value @classmethod def from_string(cls, string): value = int(string) return cls(value) ➕ Создание экземпляра через альтернативный конструктор obj = MyClass.from_string("42") print(obj.value) # Вывод: 42 ``` 🤔 Различие между `cls` и `self``self`: Используется для методов экземпляра. Ссылается на конкретный экземпляр класса, через который вызван метод. ➕ `cls`: Используется для методов класса. Ссылается на сам класс, через который вызван метод. 🤔 Пример различий
class MyClass:
    class_attribute = "Классовый атрибут"

    def __init__(self, value):
        self.instance_attribute = value

    @classmethod
    def class_method(cls):
        return cls.class_attribute

    def instance_method(self):
        return self.instance_attribute

# Создание экземпляра
obj = MyClass(42)

# Вызов метода экземпляра
print(obj.instance_method())  # Вывод: 42

# Вызов метода класса
print(MyClass.class_method())  # Вывод: "Классовый атрибут"
🤔 Подводя итог cls — это имя, используемое для обозначения самого класса в методах класса, определенных с помощью декоратора @classmethod. Оно позволяет работать с атрибутами и методами класса, а не конкретного экземпляра. 🤔 Кратко: cls используется в методах класса для обозначения самого класса, как self используется для обозначения экземпляра класса. 🔥 ТОП ВОПРОСОВ С СОБЕСОВ 🔒 База собесов | 🔒 База тестовых
إظهار الكل...

👍 3
🤔 Какое из утверждений верно относительно использования протокола контекстных менеджеров в Python?Anonymous voting
  • Контекстные менеджеры используются только для работы с файлами
  • Контекстные менеджеры освобождают ресурсы автоматически после выхода из блока with
  • Контекстные менеджеры нельзя создавать самостоятельно
  • Контекстные менеджеры работают только с асинхронными операциями
0 votes
👍 1
🤔 Что такое Миксин? Миксин (Mixin) – это класс, предназначенный для предоставления определённых методов для использования другими классами, без необходимости становиться родительским классом для этих классов. Главная цель миксина - реализация функциональности, которую можно легко подключить к другому классу. Миксины позволяют разработчикам использовать композицию для добавления функций в классы вместо наследования, что делает структуру кода гибче и модульнее. Ставь 👍 если знал ответ
إظهار الكل...
👍 24🤯 2 1🔥 1🐳 1
у
إظهار الكل...
Photo unavailableShow in Telegram
Сообщество IT-специалистов в Telegram от Selectel. Канал крупнейшего независимого провайдера IT-инфраструктуры и облаков. Шесть причин подписаться на канал: - железные новости; - обзоры продуктов; - разборы кейсов; - актуальные IT-статьи; - анонсы митапов; - бесплатные курсы. Подписаться #реклама О рекламодателе
إظهار الكل...
📌 Что такое diamondproblem? 💬 Спрашивают в 3% собеседований Проблема ромбовидного наследования (или проблема "алмаза") возникает в языках программирования с поддержкой множественного наследования, таких как Python. Эта проблема связана с неоднозначностью порядка, в котором должны наследоваться методы и атрибуты от родительских классов. Рассмотрим, как эта проблема проявляется и как Python решает её с помощью порядка разрешения методов (MRO). 🤔 Пример проблемы ромбовидного наследования Предположим, у нас есть четыре класса, организованные в ромбовидную структуру наследования:
class A:
    def method(self):
        print("Method from A")

class B(A):
    def method(self):
        print("Method from B")

class C(A):
    def method(self):
        print("Method from C")

class D(B, C):
    pass
Здесь D наследует от B и C, которые, в свою очередь, наследуют от A. Если мы создадим объект класса D и вызовем метод method, возникает вопрос: какой именно метод будет вызван — из класса B или из класса C?
d = D()
d.method()  # Какой метод будет вызван?
🤔 Решение в Python: Порядок разрешения методов (MRO) Python использует алгоритм C3-линеаризации для определения порядка разрешения методов (Method Resolution Order, MRO). Этот алгоритм помогает определить последовательность, в которой классы должны проверяться на наличие методов и атрибутов. Чтобы увидеть MRO для класса D, можно использовать метод mro():
print(D.mro())
Вывод будет следующим:
[<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>]
Это означает, что при вызове метода method у объекта D, Python сначала проверяет класс D, затем B, затем C и, наконец, A. Таким образом, метод из класса B будет вызван первым. 🤔 Пример вызова метода
d = D()
d.method()  # Выведет "Method from B"
🤔 Объяснение алгоритма C3-линеаризации Алгоритм C3-линеаризации работает следующим образом: 1️⃣ Последовательность класса: Класс и его базовые классы упорядочиваются в список. 2️⃣Сохранение порядка наследования: Базовые классы упорядочиваются так, чтобы сохранить порядок наследования. 3️⃣Решение конфликтов: Если существует неоднозначность, выбирается класс, который появляется первым в последовательности. 🤔 Пример MRO для сложной структуры Рассмотрим более сложный пример с дополнительным классом E:
class E:
    def method(self):
        print("Method from E")

class B(E, A):
    def method(self):
        print("Method from B")

class C(A):
    def method(self):
        print("Method from C")

class D(B, C):
    pass

print(D.mro())
Вывод будет:
[<class '__main__.D'>, <class '__main__.B'>, <class '__main__.E'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>]
🤔 Подводя итог Проблема ромбовидного наследования возникает из-за неоднозначности порядка наследования методов и атрибутов в множественном наследовании. Python решает эту проблему с помощью алгоритма C3-линеаризации, который определяет порядок разрешения методов (MRO), обеспечивая предсказуемое и логичное поведение. 🤔 Кратко: Проблема ромбовидного наследования возникает при множественном наследовании из-за неоднозначности порядка наследования методов. Python решает её с помощью алгоритма C3-линеаризации, который определяет порядок разрешения методов (MRO). 🔥 ТОП ВОПРОСОВ С СОБЕСОВ 🔒 База собесов | 🔒 База тестовых
إظهار الكل...

👍 5 1
🤔 Какое из утверждений верно относительно использования абстрактных базовых классов (ABC) в Python?Anonymous voting
  • ABC могут содержать как абстрактные, так и реализованные методы
  • ABC не могут содержать реализованных методов
  • ABC не поддерживают наследование
  • ABC должны наследоваться от встроенных типов данных
0 votes
👍 1
📌 Как можно проверить что объект класса является потомком? 💬 Спрашивают в 3% собеседований Чтобы проверить, является ли объект экземпляром класса-потомка, в Python можно использовать функцию isinstance(). Эта функция позволяет проверить, принадлежит ли объект определенному классу или является экземпляром класса, который наследует от указанного. 🤔 Пример использования `isinstance()` Допустим, у нас есть базовый класс Animal и два класса-потомка: Dog и Cat.
class Animal:
    pass

class Dog(Animal):
    pass

class Cat(Animal):
    pass
Теперь создадим объекты этих классов и проверим их принадлежность к классу Animal.
d, c = Dog(), Cat()
print(isinstance(d, Animal))  # True
print(isi))  # True
print(isinstance(d, Dog))     # True
print(isinstance(c, Dog))     # False
print(isinstance(c, Cat))     # True
🤔 Почему `isinstance()`? 1️⃣ Гибкость: isinstance() работает не только с конкретным классом, но и с любым классом, унаследованным от указанного. 2️⃣ Наследование: Позволяет учитывать иерархию классов и проверять, является ли объект экземпляром любого из классов-предков. 3️⃣ Безопасность: Предотвращает ошибки, связанные с неверной идентификацией типа объекта. 🤔 Дополнительный пример Рассмотрим более сложную иерархию классов:
class Vehicle:
    pass

class Car(Vehicle):
    pass

class Truck(Vehicle):
    pass

class ElectricCar(Car):
    pass
Создадим объекты и проверим их принадлежность:
v, c, t, ec = Vehicle(), Car(), Truck(), ElectricCar()
print(isinstance(v, Vehicle))         # True
print(isinstance(c, Vehicle))         # True
print(isinstance(t, Vehicle))         # True
print(isinstance(ec, Vehicle))        # True
print(isinstance(ec, Car))            # True
print(isinstance(ec, ElectricCar))    # True
print(isinstance(c, ElectricCar))     # False
🤔 Краткое объяснение Для проверки, является ли объект экземпляром класса-потомка, используйте функцию isinstance(). Она проверяет, принадлежит ли объект указанному классу или любому из его предков. 🔥 ТОП ВОПРОСОВ С СОБЕСОВ 🔒 База собесов | 🔒 База тестовых
إظهار الكل...
5👍 1
🤔 Какое из утверждений верно относительно использования модуля itertools в Python?Anonymous voting
  • Модуль itertools предназначен только для работы с числами
  • Модуль itertools доступен только в Python 3
  • Модуль itertools предоставляет функции для создания итераторов для эффективного обхода данных
  • Модуль itertools позволяет изменять исходные коллекции
0 votes
1
📌 Какие методы в метаклассах используются? 💬 Спрашивают в 3% собеседований Метаклассы в Python — это классы, которые определяют поведение других классов. Они позволяют изменять или расширять стандартное поведение классов, например, при их создании. Методы, которые используются в метаклассах, предоставляют интерфейс для различных стадий создания и настройки классов. Основные методы, используемые в метаклассах, включают: 1️⃣ `__new__(cls, name, bases, dct)`: Этот метод вызывается перед созданием нового класса. Он отвечает за создание и возвращение нового объекта класса. Здесь можно изменить или дополнить атрибуты и методы класса до его окончательного создания. 2️⃣`__init__(cls, name, bases, dct)`: Этот метод вызывается после создания класса. Он инициализирует класс после его создания, что позволяет изменить его поведение или добавить дополнительную логику. 3️⃣`__call__(cls, *args, **kwargs)`: Этот метод контролирует создание экземпляров класса. Он вызывается, когда создается объект класса. Его можно использовать для изменения процесса создания экземпляров. 4️⃣ `__prepare__(name, bases, **kwds)` (Python 3.3+): Этот метод возвращает словарь, который будет использоваться для определения атрибутов нового класса. Это полезно, если требуется контролировать порядок атрибутов или использовать специализированные словари. Рассмотрим пример метакласса, который использует некоторые из этих методов. 🤔 Пример использования метаклассов
class MyMeta(type):
    def __new__(cls, name, bases, dct):
        print(f'Creating class {name}')
        dct['class_attribute'] = 'Added by MyMeta'
        return super().__new__(cls, name, bases, dct)

    def __init__(cls, name, bases, dct):
        print(f'Initializing class {name}')
        super().__init__(name, bases, dct)

    def __call__(cls, *args, **kwargs):
        print(f'Creating instance of {cls.__name__}')
        instance = super().__call__(*args, **kwargs)
        return instance

# Использование метакласса
class MyClass(metaclass=MyMeta):
    def __init__(self, value):
        self.value = value

# Создание экземпляра класса
obj = MyClass(42)
print(obj.value)
print(obj.class_attribute)
🤔 Объяснение работы примера 1️⃣ `__new__`: Метод __new__ вызывается при создании класса MyClass. Он добавляет атрибут class_attribute к словарю атрибутов класса и выводит сообщение о создании класса. 2️⃣ `__init__`: Метод __init__ вызывается после создания класса и выводит сообщение об инициализации класса. 3️⃣`__call__`: Метод __call__ вызывается при создании экземпляра класса MyClass. Он выводит сообщение о создании экземпляра и затем вызывает стандартный процесс создания экземпляра, возвращая его. 🤔 Использование `__prepare__` Метод __prepare__ используется для возврата словаря, который будет использоваться при создании класса. Это может быть полезно для контроля порядка атрибутов или для использования специализированных словарей.
class MyMeta(type):
    @classmethod
    def __prepare__(cls, name, bases, **kwds):
        return {'custom_dict': {}}

    def __new__(cls, name, bases, dct):
        print(f'Creating class {name} with custom dict')
        print(f'Custom dict: {dct["custom_dict"]}')
        return super().__new__(cls, name, bases, dct)

# Использование метакласса с __prepare__
class MyClass(metaclass=MyMeta):
    def __init__(self, value):
        self.value = value

# Создание экземпляра класса
obj = MyClass(42)
print(obj.value)
🤔 Подводя итог Метаклассы в Python предоставляют мощный способ изменения поведения классов на разных стадиях их создания и инициализации. Основные методы, используемые в метаклассах, включают __new__, __init__, __call__ и __prepare__. 🤔 Кратко: Метаклассы используют методы __new__, __init__, __call__ и __prepare__ для изменения поведения классов при их создании и инициализации. 🔥 ТОП ВОПРОСОВ С СОБЕСОВ 🔒 База собесов | 🔒 База тестовых
إظهار الكل...
2🔥 1
اختر خطة مختلفة

تسمح خطتك الحالية بتحليلات لما لا يزيد عن 5 قنوات. للحصول على المزيد، يُرجى اختيار خطة مختلفة.