Перейти до основного вмісту
🔒 Режим прев'ю. Перші 15 уроків Foundations — безкоштовні; цей — Pro. Запусти 7-денний trial щоб відкрити редактор, AI-підказки і решту курсу. Потрібна картка, скасування в Dashboard у будь-який момент.Почати 7-денний trial →
← КурсиSenior Deep-DivesModule 7 · Memory, GC, modern typing@runtime_checkable Protocol — structural typing + its blind spotspredict123 / 161
+150 XP
Завдання
📝 **Завдання:** Передбачте точний результат. Для протоколу Sized потрібно __len__. Реальні типи з __len__ пропуском; типів без нього не вдається. Останній випадок — `FakeSized` — має атрибут, який не викликається, і називається `__len__`, а runtime_checkable все ще каже True, оскільки він перевіряє лише існування, а не можливість виклику. Про це варто знати старшим. 📋 Реалізуйте наведену вище функцію. Тести запускаються автоматично. 💡 **Підказка:** Перечитайте теорію, якщо ви застрягли.
Передбач вивід

Прочитай код уважно

from typing import Protocol, runtime_checkable


@runtime_checkable
class Sized(Protocol):
    def __len__(self) -> int: ...


class Bag:
    def __init__(self, items: list) -> None:
        self._items = items

    def __len__(self) -> int:
        return len(self._items)


class Empty:
    pass


class FakeSized:
    __len__ = "not actually a method"


print(isinstance(Bag([1, 2, 3]), Sized))
print(isinstance(Empty(), Sized))
print(isinstance([1, 2], Sized))
print(isinstance("hello", Sized))
print(isinstance(42, Sized))
print(isinstance(FakeSized(), Sized))

Що виведе програма? Напиши тут:

💬 Обговорення

Будьте першим — поставте запитання або поділіться порадою.
Увійдіть щоб приєднатися до обговорення. Читання безкоштовне.
Завантаження обговорення…