Prejsť na hlavný obsah
🔒 Režim náhľadu. Prvých pätnásť lekcií Foundations je zadarmo; táto je Pro. Spustite 7-dňový trial pre odomknutie editora, AI nápovied a zvyšku kurzu. Karta vyžadovaná, zrušte kedykoľvek v Dashboard.Spustiť 7-dňový trial →
← KurzySenior Deep-DivesModule 10 · Production idioms (modern Python)typing.Self (3.11+) — fluent builders that subclass correctlypredict146 / 161
+150 XP
Úloha
📝 **Úloha:** Predpovedajte 4-riadkový výstup. Trieda Query má reťaziteľné metódy vracajúce Self. Podtrieda TimedQuery pridáva `.slow(ms)`. Dve zostavy: jedna s Query, jedna s TimedQuery. Každý vypíše vykreslený SQL a `type(q).__name__`, aby potvrdil, že si sám zachoval identitu podtriedy v celom reťazci. 📋 Implementujte funkciu vyššie. Testy prebiehajú automaticky. 💡 **Tip:** Znova si prečítajte teóriu, ak sa zaseknete.
Predpovedz výstup

Prečítaj kód pozorne

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__)

Čo program vypíše? Napíš sem:

💬 Diskusia

Buď prvý — polož otázku alebo sa podeľ o tip.
Prihlás sa aby si sa zapojil do diskusie. Čítanie je zadarmo.
Načítava sa diskusia…