🐍 Python  ·  20 вопросов  ·  ~55 мин  ·  ⏱ Таймер 55:00  ·  Сложный  · 

Специальные методы и модель данных

Разбирает __repr__, сравнение, длину, контейнерный протокол и неизменяемость. Здесь проверяется перенос знания на новый код: вопросы распределены между шкалами «Представление объекта», «Сравнение», «Протокол контейнера» и «Неизменяемость». Все задания рассчитаны на CPython 3.12; отличия других реализаций или версий учитываются только там, где это прямо оговорено.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Версия: CPython 3.12. Выберите один ответ из четырёх. На 20 вопросов отведено не меньше 40 минут; код лучше читать построчно. После завершения вы увидите общий процент, четыре тематические шкалы и объяснение каждого ответа.
Вопрос 1 из 20
Метод `__repr__` использует `!r` для полей. Какую точную строку напечатает фрагмент?
Python
class Point:
    def __init__(self, x, y): self.x=x; self.y=y
    def __repr__(self): return f"Point({self.x!r}, {self.y!r})"
print(Point(1, "a"))
Вопрос 2 из 20
Что напечатает программа при сравнении с неподдерживаемым типом?
Python
class Amount:
    def __init__(self, value): self.value=value
    def __eq__(self, other):
        if not isinstance(other, Amount):
            return NotImplemented
        return self.value == other.value
print(Amount(3) == 3)
Вопрос 3 из 20
Метод `__contains__` проверяет чётность. Какие два логических значения напечатает код?
Python
class Box:
    def __contains__(self, item): return item % 2 == 0
print(4 in Box(), 3 in Box())
Вопрос 4 из 20
Почему хешируемый объект не должен менять поля, участвующие в `__hash__` и `__eq__`?
Вопрос 5 из 20
Что выведет __str__ и __repr__?
Python
class A:
    def __repr__(self): return "REPR"
    def __str__(self): return "STR"
a=A()
print(str(a), repr(a), f"{a!r}")
Вопрос 6 из 20
Каков результат dataclass-сравнения?
Python
from dataclasses import dataclass
@dataclass(frozen=True)
class P:
    x:int; y:int
print(P(1,2)==P(1,2), hash(P(1,2))==hash(P(1,2)))
Вопрос 7 из 20
Что произойдёт с len?
Python
class C:
    def __len__(self): return -1
len(C())
Вопрос 8 из 20
`__getitem__` делегирует списку, а индекс равен `-1`. Какое значение будет напечатано?
Python
class Seq:
    def __init__(self, data): self.data=data
    def __getitem__(self, i): return self.data[i]
print(Seq([10,20,30])[-1])
Вопрос 9 из 20
Когда `__repr__` особенно полезен?
Вопрос 10 из 20
Что вернёт сравнение порядка?
Python
from functools import total_ordering
@total_ordering
class V:
    def __init__(self,x): self.x=x
    def __eq__(self,o): return isinstance(o,V) and self.x==o.x
    def __lt__(self,o):
        if not isinstance(o,V): return NotImplemented
        return self.x<o.x
print(V(2)<=V(3), V(3)>V(2))
Вопрос 11 из 20
Какой минимальный протокол часто достаточно реализовать для последовательного обхода через индексы?
Вопрос 12 из 20
Что выведет bool объекта?
Python
class C:
    def __len__(self): return 0
print(bool(C()))
Вопрос 13 из 20
Левый операнд не умеет складываться с `R`. Какую строку вернёт отражённая операция в этом фрагменте?
Python
class R:
    def __radd__(self, other): return f"{other}+R"
print(5 + R())
Вопрос 14 из 20
В `__lt__` допущена ошибка: для неподдерживаемого типа возвращается строка. Какое исправление восстановит протокол сравнения?
Вопрос 15 из 20
В `__getitem__` передаётся срез `1:8:2`. Какой кортеж напечатает метод?
Python
class C:
    def __getitem__(self, key): return type(key).__name__, key.start, key.stop, key.step
print(C()[1:8:2])
Вопрос 16 из 20
Присваивание `p.x = 2` нарушает ограничение `frozen=True`. Какая ошибка возникнет при выполнении этой строки?
Вопрос 17 из 20
Объект попадает в журналы и отладчик, а его `__repr__` выводит многомегабайтный payload вместе с токеном доступа. Как исправить представление?
Вопрос 18 из 20
Спецификатор f-строки равен `wide`. Какую строку вернёт показанный `__format__`?
Python
class C:
    def __format__(self, spec): return f"<{spec}>"
print(f"{C():wide}")
Вопрос 19 из 20
Нужно спроектировать value object, который определяется только значениями и используется как ключ. Какое решение естественнее?
Вопрос 20 из 20
Экземпляр `Multiplier(3)` вызывается с аргументом `4`. Какие значение и результат проверки `callable` напечатает показанный фрагмент?
Python
class Multiplier:
    def __init__(self,k): self.k=k
    def __call__(self,x): return self.k*x
f=Multiplier(3)
print(f(4), callable(f))

Ответьте на все 20 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу