CodeBlanks Logo Icon CodeBlanks

Decorate class

Sınıf decorator'ı ile tüm metotları sarayı öğrenirsin.

Sınıf decorator'ı nedir?

Bir sınıf decorator'ı, sınıfı alıp değiştirip geri döndüren bir fonksiyondur. @add_greet yazınca Python önce class User'ı yaratır, sonra add_greet(User) çağırır.

Decorator içine yeni yöntem ekleyebilir, mevcut olanları sarabilir. cls.yeni_yontem = fonksiyon ile sınıfa üye eklersin. Son olarak cls'yi döndürürsün. Bu, metaclass'tan daha anlaşılır bir yol: sınıf tamamen oluştuktan sonra değişiklik yapılır.

Tüm metotları sarmak

Bir sınıf decorator'ı, sınıftaki her yöntemi dolaşıp sarabilir. vars(cls) ile ad alanı sözlüğünü alır, callable(v) ile yöntemleri seçersin.

Her yöntemi bir wrapper fonksiyonuyla sarar, günlükleme veya zamanlama eklersin. Bu desen, metaclass'tan daha sezgiseldir; @decorator satırı yapıyı açıkça gösterir. Ancak tüm yöntemleri değiştirmek dikkat ister; özel yöntemleri (__init__ gibi) istisna tutmak isteyebilirsin.

Uygulama greet decorator'ı yaz

add_greet adında bir sınıf decorator'ı yaz. Parametresi cls olsun. İçinde greet(self) yöntemi tanımla; "merhaba" döndürsün. cls.greet = greet ile sınıfa ekle, cls'yi döndür. @add_greet ile işaretli User sınıfı yaz. Örnek oluştur ve greet() çıktısını yazdır.

Başlangıç kodu

main.py
# add_greet decorator yaz
# User sınıfına uygula
# greet çağrısını yazdır

Örnek çözüm

main.py
# add_greet decorator yaz
def add_greet(cls):
    def greet(self):
        return "merhaba"
    cls.greet = greet
    return cls

@add_greet
class User:
    pass

u = User()
print(u.greet())

Beklenen çıktı

merhaba

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Decorator tanımını tamamla

Soru
def add_greet(____):
    cls.greet = lambda self: "merhaba"
    return cls
Cevap
def add_greet(cls):
    cls.greet = lambda self: "merhaba"
    return cls

Açıklama: Decorator, sınıf nesnesini cls parametresiyle alır.

2 Sınıf decorator'ı ne alır?

main.py
@add_greet
class User:
    pass
  • Sınıf adını
  • Örnek nesneyi
  • Sınıf nesnesini Doğru cevap
  • Yöntem listesini

Açıklama: Sınıf decorator'ı sınıf nesnesini alır ve döndürür.

3 Sınıf decorator kavramlarını eşleştir

Kavram Anlamı
@decorator Sınıfı sarar
cls Sınıf nesnesi
vars(cls) Ad alanı sözlüğü
wrapper Saran fonksiyon

Uzman bölümündeki tüm dersler