Как реализовать A() + B() = C()? Как сложить два объекта и получить третий?

Определите __add__ у класса A так, чтобы он принимал B и возвращал новый C. Для неподдерживаемого типа следует вернуть NotImplemented, а не произвольную ошибку.

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

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

Определите add у класса A так, чтобы он принимал B и возвращал новый C. Для неподдерживаемого типа следует вернуть NotImplemented, а не произвольную ошибку.

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

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

Определите add у класса A так, чтобы он принимал B и возвращал новый C. Для неподдерживаемого типа следует вернуть NotImplemented, а не произвольную ошибку.

from dataclasses import dataclass

@dataclass
class C:
    value: int

@dataclass
class B:
    value: int

@dataclass
class A:
    value: int

    def __add__(self, other):
        if not isinstance(other, B):
            return NotImplemented
        return C(self.value + other.value)

result = A(2) + B(3)  # C(value=5)

Знак = в формулировке означает желаемый результат, а не допустимое Python-присваивание в выражение сложения. Для обратного порядка B + A понадобится отдельная реализация, например __radd__ у A. Исходные объекты здесь не изменяются.

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

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

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

Подробнее