Μετάβαση στο κύριο περιεχόμενο
🔒 Λειτουργία προεπισκόπησης. Τα πρώτα δεκαπέντε μαθήματα Foundations είναι δωρεάν· αυτό είναι Pro. Ξεκινήστε ένα 7ήμερο trial για να ξεκλειδώσετε τον επεξεργαστή, τις υποδείξεις AI και το υπόλοιπο του προγράμματος. Απαιτείται κάρτα, ακυρώνετε οποιαδήποτε στιγμή από το Dashboard.Ξεκινήστε 7ήμερο trial →
← ΜαθήματαSenior Deep-DivesModule 11 · Decorator patterns at scaleDescriptor protocol — the mechanic under @property and ORM columnspredict155 / 161
+150 XP
Εργασία
📝 **Εργασία:** Προβλέψτε την έξοδο 4 γραμμών. Ένας περιγραφέας «Θετικό» επικυρώνει ότι οι αναθέσεις είναι θετικές εισαγωγές. Η κλάση «Λογαριασμός» το χρησιμοποιεί για δύο χαρακτηριστικά (υπόλοιπο + ηλικία). Δοκιμή: κανονικό σύνολο + λήψη έργων, η αρνητική τιμή ενεργοποιεί ValueError, η πρόσβαση σε επίπεδο κλάσης επιστρέφει τον ίδιο τον περιγραφέα (όχι την τιμή), οι τιμές ανά παρουσία είναι ανεξάρτητες. 📋 Υλοποιήστε την παραπάνω λειτουργία. Οι δοκιμές εκτελούνται αυτόματα. 💡 **Υπόδειξη:** Ξαναδιάβασε τη θεωρία αν κολλήσεις.
Πρόβλεψε έξοδο

Διάβασε τον κώδικα προσεκτικά

class Positive:
    def __set_name__(self, owner, name: str) -> None:
        self.name = name

    def __get__(self, instance, owner):
        if instance is None:
            return self
        return instance.__dict__[self.name]

    def __set__(self, instance, value) -> None:
        if not isinstance(value, int) or value <= 0:
            raise ValueError(f"{self.name} must be positive int, got {value!r}")
        instance.__dict__[self.name] = value


class Account:
    balance = Positive()
    age = Positive()


a = Account()
a.balance = 100
a.age = 30
print(a.balance, a.age)

try:
    a.balance = -5
except ValueError as e:
    print(f"rejected: {e}")

# Class-level access returns the descriptor itself, not a value
print(type(Account.balance).__name__)

# Per-instance values are independent
b = Account()
b.balance = 200
print(a.balance, b.balance)

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

💬 Συζήτηση

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