Сравнение объектов A и dataclass B без полей

Результат: False, False, True, False. У A нет собственного сравнения значений; у dataclass B нет объявленных полей, поэтому сгенерированное сравнение двух B сравнивает пустые наборы полей.

Короткий ответ

Что ответить на собеседовании

Результат: False, False, True, False. У A нет собственного сравнения значений; у dataclass B нет объявленных полей, поэтому сгенерированное сравнение двух B сравнивает пустые наборы полей.

Подробный разбор

Ответ с пояснениями

Условие

Что будет результатом?

from dataclasses import dataclass

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

@dataclass
class B:
    def __init__(self, value):
        self.value = value

a_1 = A(1)
a_2 = A(1)

b_1 = B(1)
b_2 = B(1)

print(a_1 == a_2)
print(a_1 == b_1)
print(b_1 == b_2)
print(b_1 is b_2)

Ответ

Результат: False, False, True, False. У A нет собственного сравнения значений; у dataclass B нет объявленных полей, поэтому сгенерированное сравнение двух B сравнивает пустые наборы полей.

Вывод:

False
False
True
False

Атрибут self.value создаётся вручную в __init__, но не объявлен аннотацией поля dataclass. Поэтому B(1) == B(2) здесь тоже будет True. Для сравнения по значению нужно объявить value: int в классе B. Оператор is проверяет идентичность, и отдельно созданные b_1 и b_2 остаются разными объектами.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее