Результат: False, False, True, False. У A нет собственного сравнения значений; у dataclass B нет объявленных полей, поэтому сгенерированное сравнение двух B сравнивает пустые наборы полей.
Сравнение объектов A и dataclass 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 остаются разными объектами.