Към основното съдържание
🔒 Режим за преглед. Първите петнадесет урока на Foundations са безплатни; този е Pro. Стартирайте 7-дневен trial, за да отключите редактора, AI подсказките и останалата част от курса. Изисква се карта, отменете по всяко време в Dashboard.Стартирай 7-дневен trial →
← КурсовеSenior Deep-DivesModule 10 · Production idioms (modern Python)typing.Self (3.11+) — fluent builders that subclass correctlypredict146 / 161
+150 XP
Задача
📝 **Задача:** Предскажете 4-редовия изход. Клас Query има верижни методи, връщащи Self. Подклас TimedQuery добавя „.slow(ms)“. Две компилации: една с Query, една с TimedQuery. Всеки отпечатва изобразения SQL и `type(q).__name__`, за да потвърди, че самостоятелното запазване на идентичността на подкласа в цялата верига. 📋 Приложете функцията по-горе. Тестовете се изпълняват автоматично. 💡 **Съвет:** Прочетете отново теорията, ако се затрудните.
Предскажи изхода

Прочети кода внимателно

from typing import Self


class Query:
    def __init__(self) -> None:
        self.table: str = ""
        self.filters: list[str] = []
        self.limit_: int | None = None

    def from_(self, table: str) -> Self:
        self.table = table
        return self

    def where(self, cond: str) -> Self:
        self.filters.append(cond)
        return self

    def limit(self, n: int) -> Self:
        self.limit_ = n
        return self

    def build(self) -> str:
        clauses = [f"SELECT * FROM {self.table}"]
        if self.filters:
            clauses.append("WHERE " + " AND ".join(self.filters))
        if self.limit_:
            clauses.append(f"LIMIT {self.limit_}")
        return " ".join(clauses)


class TimedQuery(Query):
    def slow(self, ms: int) -> Self:
        self.filters.append(f"duration_ms > {ms}")
        return self


q = (
    Query()
    .from_("users")
    .where("active = true")
    .where('created_at > "2026-01-01"')
    .limit(10)
)
print(q.build())
print(type(q).__name__)

t = (
    TimedQuery()
    .from_("requests")
    .slow(500)
    .where('path = "/api"')
    .limit(20)
)
print(t.build())
print(type(t).__name__)

Какво ще изведе програмата? Напиши тук:

💬 Дискусия

Бъди първи — задай въпрос или сподели съвет.
Влез за да се присъединиш към дискусията. Четенето е безплатно.
Зареждане на дискусията…