Обнаружьте дефекты в приведённом Python‑скрипте

Сначала dataclass отклонит изменяемое default=[]. Затем нужно исправить тип результата, переданный x и использование super() с slots=True. Аннотации сами по себе не проверяют типы во время выполнения.

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

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

Сначала dataclass отклонит изменяемое default=[]. Затем нужно исправить тип результата, переданный x и использование super() с slots=True. Аннотации сами по себе не проверяют типы во время выполнения.

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

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

Условие

В представленном фрагменте кода присутствуют несколько логических и типовых ошибок. Проанализируйте его и укажите проблемные места.


from __future__ import annotations
import dataclasses

class Parent:
    def method(self) -> int:
        return 1

@dataclasses.dataclass(slots=True)
class Child[T: int](Parent):
    x: T
    y: list[int] = dataclasses.field(default=[])

    def method(self) -> str:
        return self.x + len(self.y) + super().method()  # XXX

inst = Child(y=[1], x=5.5)
print(inst.method())

Ответ

Сначала dataclass отклонит изменяемое default=[]. Затем нужно исправить тип результата, переданный x и использование super() с slots=True. Аннотации сами по себе не проверяют типы во время выполнения.

Синтаксис Child[T: int] требует Python 3.12+. При создании класса default=[] вызывает ValueError: нужен field(default_factory=list). После этого x=5.5 всё равно разрешён во время исполнения: ограничение T проверяет статический анализатор, не конструктор.

method объявлен как возвращающий str, хотя складывает числа; корректный контракт здесь int и целочисленный x. В Python 3.12 dataclass(slots=True) создаёт новый класс, поэтому используйте super(Child, self).method() вместо безаргументного super() либо откажитесь от slots. Наконец, Parent без slots сохраняет экземплярам dict: slots у наследника не устраняет его автоматически.

Источник: docs.python.org.

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

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

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

Подробнее