Python | Вопросы собесов
Разбираем вопросы с собеседований на Python разработчика. Django, Flask, FastApi Сайт: easyoffer.ru Реклама: @easyoffer_adv
Mostrar más11 304
Suscriptores
+11624 horas
+7457 días
+2 38230 días
- Suscriptores
- Cobertura postal
- ER - ratio de compromiso
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 разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых🤔 5👍 3❤ 1
00:21
Video unavailableShow in Telegram
Cамый простой способ изучить Java — залезть в голову профи
Один из лучших айтишников России учит базе кодинга в Telegram. Даже гуманитарий поймёт, как создавать приложения, сайты, игры и чат-боты.
Достаточно подписаться на «Секреты Java», где каждый день появляются гайды, готовые примеры кода и лучших практик.
И всё это бесплатно — вместо сотен тысяч рублей за курсы. Стартовать в прибыльной профессии с нуля вы сможете гораздо проще!
Теперь обучиться Java может каждый: @java_secrets
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 разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых👍 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 разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых👍 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 разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых👍 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 разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых
❤ 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 разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых👍 10❤ 2🔥 1
Photo unavailableShow in Telegram
📌 Составили список лучших каналов от действующих разработчиков:
Python Developer — советы и практики от действующего Senior-разработчика
Java Developer — секреты и тонкости программирования на Java
Frontend Developer — готовый код и полезные ресурсы для любого фронтендера
👍 2🤔 2❤ 1😁 1
Какой магический метод используется для перегрузки оператора умножения для экземпляра класса?Anonymous voting
- __mul__
- __add__
- __div__
- __mod__
Photo unavailableShow in Telegram
Совет от бизнесмена на 2024 год: изучите телеграм-ботов
Их легче создать, чем кажется. Благодаря этому каналу справится даже гуманитарий, а зарабатывать будете как топовые айтишники.
Следуйте гайдам профи — и первый заказ может прийти уже в этот месяце. Это безумие, но люди готовы сколько угодно платить за пару строчек кода:
Добавьте картинки в мой бот. Дам по 3К за каждую
3500$, неделя срок, нужен бот на 10 сообщений
Накидайте три–четыре шаблона для воронки продаж — плачу 120 тыс руб
Знаете 2+2, есть ПК или ноут — трудностей не возникнет, гарантируем: @ph_tg_b
💊 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.