cookie

Utilizamos cookies para mejorar tu experiencia de navegación. Al hacer clic en "Aceptar todo", aceptas el uso de cookies.

avatar

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

Разбираем вопросы с собеседований на Python разработчика. Django, Flask, FastApi Сайт: easyoffer.ru Реклама: @easyoffer_adv

Mostrar más
Publicaciones publicitarias
11 304
Suscriptores
+11624 horas
+7457 días
+2 38230 días

Carga de datos en curso...

Tasa de crecimiento de suscriptores

Carga de datos en curso...

Что будет, если в родительских классах есть функции с одинаковым названием ? Спросят с вероятностью 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 разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых
Mostrar todo...
🤔 5👍 3 1
00:21
Video unavailableShow in Telegram
Cамый простой способ изучить Java — залезть в голову профи Один из лучших айтишников России учит базе кодинга в Telegram. Даже гуманитарий поймёт, как создавать приложения, сайты, игры и чат-боты. Достаточно подписаться на «Секреты Java», где каждый день появляются гайды, готовые примеры кода и лучших практик. И всё это бесплатно — вместо сотен тысяч рублей за курсы. Стартовать в прибыльной профессии с нуля вы сможете гораздо проще! Теперь обучиться Java может каждый: @java_secrets
Mostrar todo...
IMG_5176.MP42.73 MB
😁 3💊 1
Как в 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 разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых
Mostrar todo...
👍 8 3🤯 1
Что такое 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 разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых
Mostrar todo...
👍 17 3
Что такое объект класса ? Спросят с вероятностью 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 разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых
Mostrar todo...
👍 12🔥 2🤔 1
Что такое 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 разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых
Mostrar todo...
14👍 7🤔 2
Какие методы в метаклассах используются ? Спросят с вероятностью 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 разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых
Mostrar todo...

👍 10 2🔥 1
Photo unavailableShow in Telegram
📌 Составили список лучших каналов от действующих разработчиков: Python Developer — советы и практики от действующего Senior-разработчика Java Developer — секреты и тонкости программирования на Java Frontend Developer — готовый код и полезные ресурсы для любого фронтендера
Mostrar todo...
👍 2🤔 2 1😁 1
Какой магический метод используется для перегрузки оператора умножения для экземпляра класса?Anonymous voting
  • __mul__
  • __add__
  • __div__
  • __mod__
0 votes
Photo unavailableShow in Telegram
Совет от бизнесмена на 2024 год: изучите телеграм-ботов Их легче создать, чем кажется. Благодаря этому каналу справится даже гуманитарий, а зарабатывать будете как топовые айтишники. Следуйте гайдам профи — и первый заказ может прийти уже в этот месяце. Это безумие, но люди готовы сколько угодно платить за пару строчек кода: Добавьте картинки в мой бот. Дам по 3К за каждую 3500$, неделя срок, нужен бот на 10 сообщений Накидайте три–четыре шаблона для воронки продаж — плачу 120 тыс руб Знаете 2+2, есть ПК или ноут — трудностей не возникнет, гарантируем: @ph_tg_b
Mostrar todo...
💊 19 2👀 2👍 1
Elige un Plan Diferente

Tu plan actual sólo permite el análisis de 5 canales. Para obtener más, elige otro plan.