Μετάβαση στο κύριο περιεχόμενο
🔒 Λειτουργία προεπισκόπησης. Τα πρώτα δεκαπέντε μαθήματα 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 γραμμών. Μια κλάση ερωτήματος έχει αλυσιδωτές μεθόδους που επιστρέφουν το 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__)

Τι θα εμφανίσει το πρόγραμμα; Γράψε εδώ:

💬 Συζήτηση

Γίνε ο πρώτος — κάνε μια ερώτηση ή μοιράσου μια συμβουλή.
Σύνδεση για να συμμετάσχεις στη συζήτηση. Η ανάγνωση είναι δωρεάν.
Φόρτωση συζήτησης…