Przejdź do treści głównej
🔒 Tryb podglądu. Pierwszych piętnaście lekcji Foundations jest darmowych; ta jest Pro. Rozpocznij 7-dniowy trial, aby odblokować edytor, podpowiedzi AI i resztę kursu. Wymagana karta, anulujesz w dowolnym momencie w Dashboard.Rozpocznij 7-dniowy trial →
← KursySenior Deep-DivesModule 11 · Decorator patterns at scaleClass-based decorators — when the wrapper needs statepredict152 / 161
+150 XP
Zadanie
📝 **Zadanie:** Przewiduj wynik 6-liniowy. Klasa `CallCounter` otacza `greet` jako dekorator. Każde wywołanie zwiększa wartość `self.count`. Po trzech wywołaniach dostęp do atrybutu count uzyskuje się z ZEWNĄTRZ — jest to supermoc dekoratora opartego na klasach w stosunku do opartego na domknięciu. 📋 Zaimplementuj powyższą funkcję. Testy uruchamiają się automatycznie. 💡 **Wskazówka:** Jeśli utkniesz, przeczytaj ponownie teorię.
Przewiduj wynik

Przeczytaj kod uważnie

class CallCounter:
    def __init__(self, fn) -> None:
        self.fn = fn
        self.count = 0
        self.__name__ = fn.__name__

    def __call__(self, *args, **kwargs):
        self.count += 1
        return self.fn(*args, **kwargs)


@CallCounter
def greet(name: str) -> str:
    return f"hi {name}"


print(greet("a"))
print(greet("b"))
print(greet("c"))
print(f"calls: {greet.count}")
print(greet.__name__)
print(type(greet).__name__)

Co wypisze program? Napisz tutaj:

💬 Dyskusja

Zadaj pierwsze pytanie lub podziel się wskazówką.
Zaloguj się aby dołączyć do dyskusji. Czytanie jest darmowe.
Ładowanie dyskusji…