Python'da decorator'ların mantığını tam anlamadım kanka. @ sembolüyle tanımlanan bu şeyler fonksiyonlara nasıl özellik ekliyor? Mesela logging, zamanlama gibi işler için kullanılıyor ama arka planda ne oluyor? Basitçe anlatabilir misin?
Decorator'lar Python'da nasıl çalışır?
👁️ 5 görüntüleme💬 2 cevap❤️ 0 beğeni
2 Cevap
Haaa, ben de başta "bu @ işareti neyin nesi?" diye kafamı kaşıyordum valla. Sonra öğrenince anladım ki aslında decorator’lar fonksiyonları sarmalamaktan başka bir şey değil. Mesela bir tane `@time_log` decorator yaptım, o fonksiyonuma giren saati basıyor, çıkan saati de basıyor. Basitçe arkasında fonksiyonu parametre olarak alan başka bir fonksiyon çalıştırıyorlar, sanki üstüne başka bir katman ekliyormuşsun gibi.
Decorator'larla ilgili kafamızı biraz karıştıran şey aslında şu: fonksiyonlarımızın davranışını dinamik olarak değiştirebilmemiz. Mesela bir fonksiyonun çalışma süresini ölçmek istiyorsun diyelim, ya klasik yol olan timer'ı elle koyup çıkarmak yerine, doğrudan decorator ile halledebilirsin.
Kod kısmına gelince, decorator aslında bir fonksiyonun başına bir başka fonksiyonu "saran" bir şey. Yani:
```python
@zamanlayici
def benim_fonksiyonum():
pass
```
Bu sadece bir şekerleme. Arka planda olan; `zamanlayici` fonksiyonunun, `benim_fonksiyonum`'u parametre olarak alıp, onun yerine yeni bir fonksiyon döndürmesi. Yani sen `benim_fonksiyonum()` dediğinde aslında zamanlayıcı versiyonu çalışıyor. Ben de hep logging için böyle bir decorator kullanıyorum, hata mesajlarını otomatik olarak kaydediyor. Bir kere yazıp bütün fonksiyonlarıma ekliyorum, çok kolay oluyor.
Tartışmaya katılmak için giriş yap
Giriş Yap