ru
Feedback

Не попадитесь на канал ботавода! Telemetrio находит и помечает такие каналы 👉 Хотите видеть метку — оформите подписку

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

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

Открыть в Telegram

📈 Аналитический обзор Telegram-канала Python | Вопросы собесов

Канал Python | Вопросы собесов (@python_easy_ru) языкового сегмента Русский является активным участником. Сейчас сообщество объединяет 12 632 подписчиков, занимая 9 924 место в категории Технологии и приложения и 51 115 место в регионе Россия.

📊 Показатели аудитории и динамика

С момента создания невідомо проект демонстрирует стремительный рост, собрав аудиторию из 12 632 подписчиков.

Согласно последним данным от 17 октября, 2026, канал показывает стабильную активность. За последние 30 дней изменение числа участников составило -111, а за последние 24 часа — 0, при этом общий охват остаётся высоким.

  • Статус верификации: Не верифицирован
  • Уровень вовлечённости (ER): Средний показатель вовлечённости аудитории составляет 6.00%. В первые 24 часа после публикации контент обычно набирает 4.29% реакций от общего числа подписчиков.
  • Охват публикаций: В среднем каждый пост получает 758 просмотров. В течение первых суток публикация набирает 542 просмотров.
  • Реакции и взаимодействия: Аудитория активно поддерживает контент: среднее количество реакций на один пост — 2.
  • Тематические интересы: Контент сосредоточен на ключевых темах, таких как ставь, модуль, строка, docker, alice.

📝 Описание и контентная политика

Автор описывает ресурс как площадку для выражения субъективного мнения:
“Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads”

Благодаря высокой частоте обновлений (последние данные получены 18 октября, 2026) канал поддерживает актуальность и высокий уровень охвата публикаций. Аналитика показывает, что аудитория активно взаимодействует с контентом, что делает его важной точкой влияния в категории Технологии и приложения.

12 632
Подписчики
Нет данных24 часа
-257 дней
-11130 дней
Архив постов
Что будет, если в родительских классах есть функции с одинаковым названием ? Спросят с вероятностью 3% Если у родительских классов есть функции с одинаковым названием, и они наследуются дочерним классом, возникает проблема множественного наследования. В этом случае Python использует порядок разрешения методов (Method Resolution Order, MRO), чтобы определить, какую версию функции использовать. Порядок разрешения методов (MRO) Использует алгоритм C3-линеаризации для определения MRO. Порядок MRO определяет, в каком порядке Python будет искать методы в иерархии классов. Вы можете увидеть MRO с помощью атрибута __mro__ или метода mro(). Рассмотрим пример, где два родительских класса имеют методы с одинаковым названием:
class A:
    def method(self):
        print("Method from class A")

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

class C(A, B):
    pass

# Создание экземпляра класса C и вызов метода
c = C()
c.method()  # Выведет: Method from class A
В данном случае класс C наследует от A и B. При вызове метода method у экземпляра C Python сначала проверяет класс C, затем A (первый родитель) и только потом B (второй родитель). Таким образом, вызывается метод из класса A. Вы можете проверить порядок MRO следующим образом:
print(C.__mro__)
# Выведет: (<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)
Или с помощью метода mro():
print(C.mro())
# Выведет: [<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>]
Влияние порядка наследования Если поменять порядок наследования в определении класса C, результат изменится:
class C(B, A):
    pass

c = C()
c.method()  # Выведет: Method from class B
Теперь метод из класса B будет вызван первым, так как B указан перед A в списке родительских классов. Можно также переопределить метод в дочернем классе, чтобы явно указать, какой метод использовать:
class C(A, B):
    def method(self):
        print("Method from class C")

c = C()
c.method()  # Выведет: Method from class C
Если нужно вызвать метод из конкретного родительского класса, можно использовать super():
class C(A, B):
    def method(self):
        super(A, self).method()  # Вызывает метод из класса B, так как он идет следующим после A в MRO

c = C()
c.method()  # Выведет: Method from class B
Если у родительских классов есть функции с одинаковым названием, использует порядок разрешения методов (MRO) для определения, какой метод вызывать. Вы можете проверить порядок MRO с помощью атрибута mro или метода mro(). Порядок наследования в определении класса влияет на MRO и на то, какой метод будет вызван. 👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых

Cамый простой способ изучить Java — залезть в голову профи Один из лучших айтишников России учит базе кодинга в Telegram. Даже гуманитарий поймёт, как создавать приложения, сайты, игры и чат-боты. Достаточно подписаться на «Секреты Java», где каждый день появляются гайды, готовые примеры кода и лучших практик. И всё это бесплатно — вместо сотен тысяч рублей за курсы. Стартовать в прибыльной профессии с нуля вы сможете гораздо проще! Теперь обучиться Java может каждый: @java_secrets

Как в python реализуются public метод ? Спросят с вероятностью 3% Методы по умолчанию являются публичными (public). Это означает, что они доступны для вызова из любого места, где доступен объект класса. Публичные методы предназначены для взаимодействия с объектом извне и предоставляют интерфейс для выполнения действий или получения данных. Пример:
class MyClass:
    def __init__(self, value):
        self.value = value

    def public_method(self):
        print(f"The value is {self.value}")

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

# Вызов публичного метода
obj.public_method()  # Выведет: The value is 10
В этом примере: ✅Метод public_method является публичным, поскольку он определён без каких-либо специальных модификаторов и доступен извне. Как их отличить Принято использовать соглашения об именах для различения публичных и непубличных (приватных и защищённых) методов: 1️⃣Публичные методы: не имеют подчёркиваний в начале имени. 2️⃣Защищённые методы: имеют одно подчёркивание в начале имени (_method). 3️⃣Приватные методы: имеют два подчёркивания в начале имени (__method). Однако следует помнить, что эти соглашения носят рекомендательный характер и не обеспечивают жёсткого ограничения доступа, как в некоторых других языках программирования. Пример для всех типов методов
class MyClass:
    def __init__(self, value):
        self.value = value

    def public_method(self):
        print(f"Public method: The value is {self.value}")

    def _protected_method(self):
        print(f"Protected method: The value is {self.value}")

    def __private_method(self):
        print(f"Private method: The value is {self.value}")

    def access_private_method(self):
        self.__private_method()

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

# Вызов публичного метода
obj.public_method()  # Выведет: Public method: The value is 10

# Вызов защищённого метода (можно, но не рекомендуется)
obj._protected_method()  # Выведет: Protected method: The value is 10

# Вызов приватного метода напрямую приведёт к ошибке
# obj.__private_method()  # АтрибутError

# Вызов приватного метода через публичный метод
obj.access_private_method()  # Выведет: Private method: The value is 10
Почему использовать публичные методы 1️⃣Интерфейс для взаимодействия: Публичные методы предоставляют способ взаимодействия с объектом, позволяя выполнять действия или получать данные. 2️⃣Инкапсуляция: Они помогают скрывать внутреннюю реализацию класса, предоставляя только необходимые для пользователя методы. Публичные методы доступны для вызова из любого места. Они предоставляют интерфейс для взаимодействия с объектом и обычно не имеют подчёркиваний в начале имени. 👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых

Что такое cls ? Спросят с вероятностью 3% cls — это имя, принятое по соглашению для первого параметра методов класса. Он используется аналогично тому, как self используется в методах экземпляра. В то время как self ссылается на конкретный объект (экземпляр) класса, cls ссылается на сам класс. Методы класса Это методы, которые получают сам класс в качестве первого аргумента. Для их создания используется декоратор @classmethod. Рассмотрим пример:
class MyClass:
    class_variable = 0

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

    @classmethod
    def class_method(cls, increment):
        cls.class_variable += increment
        print(f"Class variable is now {cls.class_variable}")

# Создание экземпляров
obj1 = MyClass(1)
obj2 = MyClass(2)

# Вызов метода класса
MyClass.class_method(5)  # Выведет: Class variable is now 5
obj1.class_method(3)     # Выведет: Class variable is now 8
obj2.class_method(2)     # Выведет: Class variable is now 10
В этом примере: ✅Класс MyClass: имеет переменную класса class_variable и метод класса class_method. ✅Метод класса class_method: использует cls для доступа и изменения переменной класса. Почему он используется 1️⃣Доступ к атрибутам класса: Методы класса могут изменять состояние класса, а не конкретного экземпляра. 2️⃣Создание альтернативных конструкторов: Часто используется для создания дополнительных способов инициализации объектов. Пример:
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    @classmethod
    def from_birth_year(cls, name, birth_year):
        age = 2024 - birth_year
        return cls(name, age)

# Создание объектов с использованием альтернативного конструктора
person1 = Person("Alice", 30)
person2 = Person.from_birth_year("Bob", 1990)

print(person1.name, person1.age)  # Выведет: Alice 30
print(person2.name, person2.age)  # Выведет: Bob 34
В этом примере: ✅Метод класса from_birth_year использует cls для создания нового объекта Person, рассчитывая возраст на основе года рождения. cls используется в методах класса для ссылки на сам класс. Он позволяет методам класса изменять состояние класса и создавать альтернативные конструкторы. 👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых

Что такое объект класса ? Спросят с вероятностью 3% Объект класса, или просто объект, — это экземпляр класса, созданный на основе его шаблона. Класс в ООП служит как чертеж для создания объектов. Он определяет атрибуты (данные) и методы (функции), которые объект будет иметь. Создание класса и объектов Рассмотрим пример:
class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def bark(self):
        print(f"{self.name} is barking")

# Создание объектов класса Dog
dog1 = Dog("Buddy", 3)
dog2 = Dog("Molly", 5)

# Вызов метода объекта
dog1.bark()  # Выведет: Buddy is barking
dog2.bark()  # Выведет: Molly is barking
В этом примере: 1️⃣Класс Dog: определяет два атрибута (name и age) и один метод (bark). 2️⃣Конструктор init: метод, который вызывается при создании нового объекта. Он инициализирует атрибуты объекта. 3️⃣Объекты dog1 и dog2: создаются на основе класса Dog и являются его экземплярами. Важные аспекты 1️⃣Атрибуты: данные, хранящиеся в объекте. Например, dog1.name и dog1.age — это атрибуты объекта dog1. 2️⃣Методы: функции, определенные в классе, которые могут быть вызваны для объекта. Например, dog1.bark() вызывает метод bark объекта dog1. 3️⃣Инкапсуляция: механизм объединения данных (атрибутов) и методов для работы с этими данными в одном объекте. 4️⃣Полиморфизм: возможность объектов разного класса предоставлять одинаковый интерфейс для работы. 5️⃣Наследование: возможность создавать новый класс на основе существующего, унаследуя его атрибуты и методы. Пример с наследованием
class Animal:
    def __init__(self, species):
        self.species = species

    def make_sound(self):
        pass

class Dog(Animal):
    def __init__(self, name, age):
        super().__init__("Dog")
        self.name = name
        self.age = age

    def bark(self):
        print(f"{self.name} is barking")

    def make_sound(self):
        self.bark()

dog1 = Dog("Buddy", 3)
dog1.make_sound()  # Выведет: Buddy is barking
В этом примере: ✅Класс Animal является базовым классом. ✅Класс Dog наследует от Animal и добавляет свои методы и атрибуты. ✅Метод make_sound переопределяется в классе Dog для реализации специфического поведения. Объект класса — это конкретный экземпляр класса с собственными атрибутами и методами. Класс определяет структуру объектов, а объект является конкретной реализацией этой структуры. 👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых

Что такое diamondproblem ? Спросят с вероятностью 3% Проблема ромбовидного наследования (Diamond Problem) возникает в ООП при использовании множественного наследования. Суть проблемы заключается в неоднозначности, возникающей из-за наследования от нескольких классов, имеющих общего предка. Рассмотрим пример:
class A:
    def method(self):
        print("Method in A")

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

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

class D(B, C):
    pass

d = D()
d.method()
В этом примере: ✅Класс A является базовым классом. ✅Классы B и C наследуют от класса A и переопределяют метод method. ✅Класс D наследует от классов B и C. Когда мы вызываем метод method через экземпляр класса D (d.method()), возникает вопрос: какой именно метод должен быть вызван - из класса B или из класса C? Это и есть проблема ромбовидного наследования. Решение проблемы ромбовидного наследования Использует метод разрешения порядка (MRO - Method Resolution Order) для решения этой проблемы. MRO определяет порядок, в котором методы должны вызываться в случае множественного наследования. Для просмотра MRO можно использовать атрибут __mro__ или функцию mro().
print(D.__mro__)
Результат будет следующим:
(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>)
Согласно этому порядку, метод method будет взят из класса B, так как он идёт первым в MRO. Поэтому при вызове d.method(), выведется: Method in B Если классы B и C используют super(), можно правильно вызвать методы всех классов-предков:
class A:
    def method(self):
        print("Method in A")

class B(A):
    def method(self):
        print("Method in B")
        super().method()

class C(A):
    def method(self):
        print("Method in C")
        super().method()

class D(B, C):
    def method(self):
        print("Method in D")
        super().method()

d = D()
d.method()
Результат выполнения будет:
Method in D
Method in B
Method in C
Method in A
В этом случае методы всех классов вызываются в порядке, определённом MRO. Проблема ромбовидного наследования возникает при множественном наследовании и приводит к неоднозначности, какой метод вызывать. Решает эту проблему с помощью MRO (Method Resolution Order), определяющего порядок вызова методов. 👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых

Какие методы в метаклассах используются ? Спросят с вероятностью 3% Метаклассы предоставляют возможность управления созданием и поведением классов. Основными методами, которые используются в метаклассах, являются: 1️⃣`__new__`: Отвечает за создание нового класса. Он вызывается до __init__ и используется для создания нового объекта класса. В метаклассе new позволяет изменять процесс создания класса. 2️⃣`__init__`: Инициализирует класс, после того как он был создан. В метаклассе init используется для модификации созданного класса, например, добавления атрибутов или методов. 3️⃣`__call__`: Позволяет метаклассу контролировать процесс создания экземпляров класса. Он вызывается, когда создаётся новый объект класса. Рассмотрим пример использования этих методов:
class MyMeta(type):
    def __new__(cls, name, bases, dct):
        print(f'Creating class {name}')
        # Добавление нового атрибута
        dct['added_attribute'] = 'I was 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 class {cls.__name__}')
        return super().__call__(*args, **kwargs)

class MyClass(metaclass=MyMeta):
    def __init__(self):
        print('Instance initialized')

# Создание экземпляра класса
instance = MyClass()
print(instance.added_attribute)
В этом примере: ✅Метод
ating ins
добавляет новый атрибут added_attribute к классу. ✅Метод init выполняет инициализацию класса и может быть использован для дальнейших модификаций. ✅Метод call контролирует создание экземпляров класса и выполняет необходимые действия при создании нового объекта. Методы new, init и call в метаклассах используются для управления процессами создания и инициализации классов, а также создания их экземпляров. Они позволяют модифицировать классы на различных этапах их жизненного цикла. 👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых

📌 Составили список лучших каналов от действующих разработчиков: Python Developer — советы и практики от действующего Senior-
📌 Составили список лучших каналов от действующих разработчиков: Python Developer — советы и практики от действующего Senior-разработчика Java Developer — секреты и тонкости программирования на Java Frontend Developer — готовый код и полезные ресурсы для любого фронтендера

Какой магический метод используется для перегрузки оператора умножения для экземпляра класса?
Anonymous voting

Совет от бизнесмена на 2024 год: изучите телеграм-ботов Их легче создать, чем кажется. Благодаря этому каналу справится даже
Совет от бизнесмена на 2024 год: изучите телеграм-ботов Их легче создать, чем кажется. Благодаря этому каналу справится даже гуманитарий, а зарабатывать будете как топовые айтишники. Следуйте гайдам профи — и первый заказ может прийти уже в этот месяце. Это безумие, но люди готовы сколько угодно платить за пару строчек кода: Добавьте картинки в мой бот. Дам по 3К за каждую 3500$, неделя срок, нужен бот на 10 сообщений Накидайте три–четыре шаблона для воронки продаж — плачу 120 тыс руб Знаете 2+2, есть ПК или ноут — трудностей не возникнет, гарантируем: @ph_tg_b

Как в python реализуются метод объекта ? Спросят с вероятностью 3% Методы объекта реализуются как функции, определённые внутри класса. Они могут работать с данными объекта и предоставляют интерфейс для взаимодействия с экземплярами класса. Важным аспектом методов объекта является то, что они принимают первым параметром self, который является ссылкой на экземпляр класса. Пример реализации методов объекта
class MyClass:
    def __init__(self, value):
        self.value = value  # Инициализация атрибута

    def display_value(self):
        print(f"The value is: {self.value}")  # Метод для вывода значения атрибута

    def increment_value(self, amount):
        self.value += amount  # Метод для увеличения значения атрибута на заданное количество

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

# Вызов методов объекта
obj.display_value()  # Выведет: The value is: 10
obj.increment_value(5)
obj.display_value()  # Выведет: The value is: 15
Объяснение кода 1️⃣Конструктор __init__: ✅Метод реализуютявляется специальным методом, который вызывается при создании нового экземпляра класса. ✅Он используется для инициализации атрибутов экземпляра. 2️⃣Метод display_value: ✅Этот метод выводит текущее значение атрибута value. ✅Он принимает только один параметр self, который автоматически передаётся при вызове метода у объекта. 3️⃣Метод increment_value: ✅Этот метод увеличивает значение атрибута value на заданное количество. ✅Он принимает два параметра: self и amount, где self — это ссылка на экземпляр, а amount — значение, на которое нужно увеличить value. Использование self Это ссылка на текущий экземпляр класса, которая позволяет доступ к его атрибутам и другим методам. Важно использовать self для чтения и изменения атрибутов экземпляра внутри методов. Методы экземпляра, класса и статические методы В дополнение к обычным методам объекта, также можно определить методы класса и статические методы. 1️⃣Методы класса: ✅Методы класса используют декоратор @classmethod и принимают первым параметром cls, который является ссылкой на сам класс. ✅Они полезны для работы с атрибутами класса или для создания экземпляров альтернативными способами.
class MyClass:
    class_value = 0

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

    @classmethod
    def set_class_value(cls, new_value):
        cls.class_value = new_value

# Вызов метода класса
MyClass.set_class_value(10)
print(MyClass.class_value)  # Выведет: 10
2️⃣Статические методы: Статические методы используют декоратор @staticmethod и не принимают ни self, ни cls. ✅Они полезны для функций, которые не зависят от состояния экземпляра или класса.
class MyClass:
    @staticmethod
    def static_method():
        print("This is a static method")

# Вызов статического метода
MyClass.static_method()  # Выведет: This is a static method
Методы объекта — это функции, определённые внутри класса, которые работают с данными экземпляра через параметр self. Методы класса и статические методы также могут быть определены с использованием декораторов @classmethod и @staticmethod соответственно. 👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых

Все надоело и пропал интерес, чувствуешь себя амебой и хочется только залипать в телефоне. Бывает? Психолог взрослого человек
Все надоело и пропал интерес, чувствуешь себя амебой и хочется только залипать в телефоне. Бывает? Психолог взрослого человека - канал для айтишников, у которых периодически опускаются руки и отключается мозг, ибо переработки и постоянная тревожность не приводят к другим исходам. ▪️ Как научиться отвлекаться от работы и отдыхать? ▪️ Как совместить кучу рабочих задач и время с семьей? ▪️ Как справиться с прокрастинацией? ▪️ Как не растерять запал, даже если начальник и коллеги 💩 и кажется, что ничего не выходит? Подписывайтесь на канал @vadimpetrov_psy и научитесь работать без упахивания, выгорания и ущерба для личной жизни! 👨🏻‍💻 Псс. Заходите в закреп канала - там много полезного.

Какой метод декоратора property позволяет установить значение атрибута, при этом применяя дополнительные проверки или вычисления?
Anonymous voting

Как выражена инкапсуляция в python ? Спросят с вероятностью 3% Инкапсуляция выражена через механизмы, которые позволяют скрывать внутренние детали реализации класса и предоставлять доступ к данным и методам через определённый интерфейс. Достигается с помощью соглашений об именовании и специальных методов. Основные аспекты инкапсуляции включают: Соглашения об именовании 1️⃣Приватные атрибуты и методы: ✅В Python соглашение об именовании позволяет сделать атрибуты и методы приватными, что предотвращает их случайное использование вне класса. ✅Атрибуты и методы, начинающиеся с одного подчёркивания (_), считаются защищёнными и не должны использоваться вне класса или подклассов. ✅Атрибуты и методы, начинающиеся с двойного подчёркивания (__), подвергаются манглингу имён (name mangling), что делает их труднодоступными из вне класса.
class MyClass:
    def __init__(self, value):
        self._protected_value = value  # Защищённый атрибут
        self.__private_value = value   # Приватный атрибут

    def _protected_method(self):
        print("This is a protected method.")

    def __private_method(self):
        print("This is a private method.")
Примеры использования 1️⃣Защищённые атрибуты и методы: ✅Они не предназначены для использования вне класса, но могут быть использованы в подклассах. ✅Их использование вне класса является плохой практикой, но технически возможно.
class SubClass(MyClass):
    def access_protected(self):
        print(self._protected_value)
        self._protected_method()

instance = SubClass(10)
instance.access_protected()
# Выведет:
# 10
# This is a protected method.
2️⃣Приватные атрибуты и методы: ✅Они подвергаются манглингу имён, что делает их труднодоступными из вне класса. ✅Внешний доступ возможен, но с использованием специального синтаксиса, что считается плохой практикой.
class AnotherClass:
    def __init__(self, value):
        self.__private_value = value

    def __private_method(self):
        print("This is a private method.")

    def access_private(self):
        print(self.__private_value)
        self.__private_method()

instance = AnotherClass(20)
instance.access_private()
# Выведет:
# 20
# This is a private method.

# Попытка доступа к приватному атрибуту извне
# print(instance.__private_value)  # AttributeError

# Доступ с использованием манглинга имён (не рекомендуется)
print(instance._AnotherClass__private_value)  # Выведет: 20
Свойства (Properties) Предоставляют интерфейс для управления доступом к атрибутам и позволяют инкапсулировать логику доступа и изменения данных.
class MyClassWithProperty:
    def __init__(self, value):
        self._value = value

    @property
    def value(self):
        return self._value

    @value.setter
    def value(self, new_value):
        if new_value > 0:
            self._value = new_value
        else:
            raise ValueError("Value must be positive")

instance = MyClassWithProperty(10)
print(instance.value)  # Выведет: 10
instance.value = 20
print(instance.value)  # Выведет: 20
# instance.value = -10  # ValueError: Value must be positive
Инкапсуляция достигается с помощью соглашений об именовании (одинарное подчёркивание для защищённых и двойное подчёркивание для приватных атрибутов и методов) и использования свойств для управления доступом к атрибутам. Это позволяет скрывать внутренние детали реализации и предоставлять контролируемый интерфейс для взаимодействия с объектами. 👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых

Какой метод метакласса позволяет модифицировать атрибуты класса перед его созданием?
Anonymous voting

Как бы реализовал метод new через singleton ? Спросят с вероятностью 3% Чтобы реализовать метод __new__ для создания класса по шаблону Singleton, нужно следовать принципам, которые обеспечивают создание только одного экземпляра класса. Метод new отвечает за создание нового экземпляра класса, и его можно использовать для контроля этого процесса. Ниже приведен пример реализации Singleton с использованием метода new. Пример реализации Singleton с методом new
class Singleton:
    _instance = None

    def __new__(cls, *args, **kwargs):
        if cls._instance is None:
            cls._instance = super(Singleton, cls).__new__(cls, args, kwargs)
        return cls._instance

    def __init__(self, value):
        if not hasattr(self, 'initialized'):
            self.value = value
            self.initialized = True

# Проверка работы Singleton
singleton1 = Singleton(10)
singleton2 = Singleton(20)

print(singleton1 is singleton2)  # Выведет: True
print(singleton1.value)          # Выведет: 10
print(singleton2.value)          # Выведет: 10
Объяснение кода 1️⃣Атрибут _instance: ✅cls._instance используется для хранения единственного экземпляра класса. 2️⃣Метод
e):
      
✅Методреализовавызывается передл метод neи отвечает за создание нового экземпляра класса. ✅Если _instance равен None, создается новый экземпляр с помощью super(Singleton, cls).__new__(cls, args, kwargs) и сохраняется в _instance. ✅Если _instance уже существует, возвращается существующий экземпляр. 3️⃣Метод init: ✅Метод init выполняет инициализацию экземпляра. ✅Чтобы избежать повторной инициализации, проверяется наличие атрибута initialized. Если он не существует, происходит инициализация атрибутов и устанавливается initialized = True. Преимущества и особенности реализации ✅Контроль создания экземпляров: Метод new гарантирует, что создается только один экземпляр класса. ✅Предотвращение повторной инициализации: Метод init инициализируется только один раз, что предотвращает перезапись значений атрибутов при повторных вызовах. Метод new используется в шаблоне Singleton для создания только одного экземпляра класса. Он контролирует процесс создания объекта, возвращая существующий экземпляр, если он уже создан. 👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых

Какое утверждение описывает ключевое отличие между списками и кортежами, которое влияет на производительность?
Anonymous voting

Для чего они нужны dunder методы ? Спросят с вероятностью 3% Dunder-методы представляют собой специальные методы, которые начинаются и заканчиваются двойным подчёркиванием (например, __init__,Для чего __repr__). Основные методы и их назначения 1️⃣Инициализация и завершение объектов: ✅__init__(self, ...): Конструктор класса, вызывается при создании нового экземпляра.
          class MyClass:
         def __init__(self, value):
             self.value = value
     
✅__del__(self): Деструктор, вызывается при удалении объекта. 2️⃣Представление объектов: ✅__str__(self): Определяет поведение функции str() и print(). Возвращает строковое представление объекта для пользователя.
          class MyClass:
         def __init__(self, value):
             self.value = value

         def __str__(self):
             return f'MyClass with value {self.value}'
     
✅__repr__(self): Определяет поведение функции repr(). Возвращает строковое представление объекта для разработчика.
          class MyClass:
         def __init__(self, value):
             self.value = value

         def __repr__(self):
             return f'MyClass({self.value!r})'
     
3️⃣Сравнение объектов: ✅__eq__(self, other): Оператор равенства ==. ✅__lt__(self, other): Оператор меньше <. ✅__le__(self, other): Оператор меньше или равно <=. ✅Аналогично можно определить методыСравнениДля чегоДля чего 4️⃣Арифметические операции: ✅__add__(self, other): Оператор сложения +. ✅__sub__(self, other): Оператор вычитания -. ✅__mul__(self, other): Оператор умножения *. ✅Аналогично можно определить методы для других арифметических операций:х назначения Для чего они нДля чего Для чего 5️⃣Контейнерные операции: ✅__len__(self): Возвращает длину объекта, используется в функции len().
          class MyContainer:
         def __init__(self, items):
             self.items = items

         def __len__(self):
             return len(self.items)
     
✅__getitem__(self, key): Позволяет доступ к элементам по ключу (используется оператор []).
          class MyContainer:
         def __init__(self, items):
             self.items = items

         def __getitem__(self, index):
             return self.items[index]
     
6️⃣Итерация: ✅__iter__(self): Возвращает итератор для объекта.
          class MyContainer:
         def __init__(self, items):
             self.items = items

         def __iter__(self):
             return iter(self.items)
     
7️⃣Контекстные менеджеры: ✅__enter__(self): Определяет действия при входе в контекст (with). ✅__exit__(self, exc_type, exc_value, traceback): Определяет действия при выходе из контекста.
          class MyContextManager:
         def __enter__(self):
             print("Entering the context")
             return self

         def __exit__(self, exc_type, exc_value, traceback):
             print("Exiting the context")

     with MyContextManager():
         print("Inside the context")
     
Зачем они нужны 1️⃣Упрощение работы с объектами: Позволяют легко определять, как объекты класса должны вести себя при использовании стандартных операторов и функций Python. 2️⃣Читаемость и удобство: Улучшают читаемость и удобство использования кода, делая объекты более интуитивными и естественными для работы. 3️⃣Переиспользование кода: Позволяют реализовать методы один раз и переиспользовать их в различных частях программы, что способствует уменьшению дублирования кода. Dunder-методы позволяют классам интегрироваться с встроенными операциями и функциями, такими как арифметические операции, сравнения и представления. Они делают работу с объектами интуитивной и упрощают код. 👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых

Какой HTTP метод REST API не соответствует принципу идемпотентности, согласно стандартному использованию?
Anonymous voting

Какая проблема Python связана с множественным наследованием ? Спросят с вероятностью 3% Множественное наследование позволяет классу наследовать от нескольких базовых классов, что может быть полезно, но также приводит к ряду проблем. Основные проблемы, связанные с множественным наследованием, включают: 1️⃣Проблема ромба (Diamond Problem): ✅Это ситуация, когда класс наследует от двух классов, которые оба наследуют от одного общего предка. Это может привести к неоднозначности в разрешении методов и атрибутов. ✅Пример:
          class A:
         def method(self):
             print("Method in A")

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

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

     class D(B, C):
         pass

     d = D()
     d.method()  # Какой метод будет вызван: из B или из C?
     
2️⃣Проблемы с порядком разрешения методов (MRO - Method Resolution Order): ✅В Python для решения проблемы ромба используется алгоритм C3-линеаризации, который определяет порядок, в котором должны быть просмотрены базовые классы. ✅Можно использовать функцию mro() для просмотра порядка разрешения методов:
  print(D.mro())
     
✅Пример:
          class A:
         def method(self):
             print("Method in A")

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

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

     class D(B, C):
         pass

     d = D()
     d.method()  # Выведет: "Method in B", так как B стоит раньше C в MRO
     
3️⃣Управление состоянием и совместимость: ✅Классы могут иметь конфликтующие атрибуты и методы, что усложняет управление состоянием объектов. ✅Переопределение методов в одном классе может непредсказуемо повлиять на поведение других классов. Как он решает эти проблемы Использует несколько подходов для решения проблем, связанных с множественным наследованием: 1️⃣Алгоритм C3-линеаризации: ✅Этот алгоритм гарантирует корректный и предсказуемый порядок вызовов методов при множественном наследовании. ✅Порядок определяется как левая-направо, глубина-первый подход с корректировкой для избежания дублирования базовых классов. 2️⃣Использование функции super(): ✅Функция super() позволяет корректно вызывать методы родительских классов, следуя порядку MRO. ✅Это помогает избежать явного указания родительских классов и упрощает поддержку кода. ✅Пример:
          class A:
         def method(self):
             print("Method in A")

     class B(A):
         def method(self):
             super().method()
             print("Method in B")

     class C(A):
         def method(self):
             super().method()
             print("Method in C")

     class D(B, C):
         def method(self):
             super().method()

     d = D()
     d.method()
     # Выведет:
     # Method in A
     # Method in C
     # Method in B
     
Проблема множественного наследования связана с неоднозначностью порядка вызова методов и конфликтами атрибутов. Python решает эти проблемы с помощью алгоритма C3-линеаризации и функции super(), обеспечивающей корректный порядок разрешения методов. 👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых