Yükleniyor...

Dekoratörler

Python'da dekoratörler, bir fonksiyonun veya metodun davranışını değiştirmeden yeni işlevsellik eklemeye olanak tanıyan güçlü bir özelliktir. Backend geliştirmede dekoratörler, kodun yeniden kullanılabilirliğini artırmak, sorumlulukları ayırmak ve OOP prensiplerine uygun bir yapı sağlamak açısından kritik öneme sahiptir. Sistem mimarisinde, dekoratörler genellikle logging, erişim kontrolü, veri doğrulama, performans ölçümü ve önbellekleme gibi çapraz kesen (cross-cutting) işlevlerin uygulanmasında kullanılır.
Temel olarak bir dekoratör, başka bir fonksiyonu parametre olarak alan ve bu fonksiyon etrafında ek işlemler yaparak yeni bir fonksiyon döndüren bir yapıdır. Bu sayede orijinal fonksiyon değiştirilmeden ek mantık uygulanabilir. Bu eğitimde, dekoratörlerin temel ve ileri düzey kullanımlarını, algoritmalarla entegrasyonunu ve OOP prensipleriyle nasıl birleştirileceğini öğreneceksiniz. Ayrıca, hafıza sızıntıları, hatalı hata yönetimi ve verimsiz algoritmalar gibi yaygın hatalardan kaçınma yöntemleri, performans optimizasyonu ve güvenlik önlemleri de ele alınacaktır.

Temel Örnek

python
PYTHON Code
def log_decorator(func):
def wrapper(*args, **kwargs):
print(f"Fonksiyon {func.name} çağrıldı, argümanlar: {args}, {kwargs}")
result = func(*args, **kwargs)
print(f"Dönen değer: {result}")
return result
return wrapper

@log_decorator
def toplama(a, b):
return a + b

sonuc = toplama(5, 10)

Bu örnekte log_decorator fonksiyonu, toplama fonksiyonunu parametre olarak alır ve wrapper adlı bir iç fonksiyon döndürür. Wrapper, args ve kwargs kullanarak fonksiyonun tüm argümanlarını alır, çağrı öncesinde ve sonrasında logging yapar ve orijinal fonksiyonu çağırır. @log_decorator ifadesi, toplama fonksiyonunu otomatik olarak dekoratöre sarar.
Bu yapı, backend uygulamalarda fonksiyon çağrılarını izlemek, girişleri doğrulamak veya performans ölçmek için kullanışlıdır.
args ve **kwargs kullanımı, dekoratörün farklı fonksiyon imzalarıyla uyumlu olmasını sağlar. Bu örnek, kodun modüler, okunabilir ve bakımı kolay olmasına katkı sağlar.

Pratik Örnek

python
PYTHON Code
def rol_gerekli(role_required):
def decorator(func):
def wrapper(kullanici, *args, **kwargs):
if getattr(kullanici, 'rol', None) != role_required:
raise PermissionError(f"Kullanıcının rolü {role_required} değil")
return func(kullanici, *args, **kwargs)
return wrapper
return decorator

class Kullanici:
def init(self, isim, rol):
self.isim = isim
self.rol = rol

@rol_gerekli("admin")
def hesap_sil(kullanici, hesap_id):
print(f"{kullanici.isim} kullanıcısı {hesap_id} ID'li hesabı sildi")

admin_kullanici = Kullanici("Ayşe", "admin")
hesap_sil(admin_kullanici, 123)

Bu ileri düzey örnekte, rol_gerekli dekoratörü erişim kontrolü sağlar. Decorator, role_required argümanı alır ve wrapper fonksiyonunda kullanıcının rolünü kontrol eder. Eğer rol uygun değilse PermissionError fırlatılır.
Kullanici sınıfı, OOP prensiplerini kullanarak kullanıcı bilgilerini kapsüller. Decorator sayesinde erişim kontrolü fonksiyonlardan ayrılır, kod tekrarı önlenir ve sistem güvenliği artırılır. args ve *kwargs kullanımı, dekoratörün farklı fonksiyon imzalarıyla uyumlu çalışmasını sağlar. Bu yapı, backend sistemlerinde kritik fonksiyonları korumak ve modüler bir yapı sağlamak için yaygın olarak kullanılır.

Dekoratörlerde en iyi uygulamalar arasında functools.wraps kullanarak orijinal fonksiyon metadatalarını korumak, wrapper fonksiyonlarını basit tutmak ve hata yönetimini doğru uygulamak yer alır. Yaygın hatalar, gereksiz referanslar nedeniyle hafıza sızıntısı, karmaşık wrapper yapıları ve verimsiz kontrol mekanizmalarıdır.
Hata ayıklamak için dekoratörleri bağımsız test edin, yapılandırılmış logging kullanın ve argümanların doğru şekilde iletildiğini doğrulayın. Performansı optimize etmek için tekrar eden işlemleri minimize edin ve önbellekleme kullanın. Güvenlik açısından giriş doğrulaması ve sıkı erişim kontrolleri uygulayın. Bu uygulamalar, dekoratörlerin etkin, güvenli ve sürdürülebilir olmasını sağlar.

📊 Referans Tablosu

Element/Concept Description Usage Example
log_decorator Fonksiyon çağrılarını ve dönüş değerlerini kaydeden dekoratör @log_decorator
wrapper Fonksiyon argümanlarını ve dönüş değerlerini işleyen iç fonksiyon Logging, doğrulama, ön işlem
rol_gerekli Parametreli erişim kontrolü dekoratörü @rol_gerekli("admin")
functools.wraps Orijinal fonksiyon metadatalarını korur @wraps(func) wrapper içinde
*args, **kwargs Her tür argümanı kabul eder Wrapper fonksiyonlarında esneklik sağlar

Dekoratörler, fonksiyonların ve metodların işlevselliğini modüler ve temiz bir şekilde genişletmeyi sağlar. Logging, önbellekleme, güvenlik ve veri doğrulama gibi çapraz kesen işlevlerin uygulanması için idealdir. Öğrenilen bilgiler, yazılım mimarisi ve backend geliştirme süreçlerinde kod tekrarını azaltır ve sistemin sürdürülebilirliğini artırır.
Bir sonraki adımlar olarak sınıf dekoratörlerini, iç içe dekoratörleri ve tasarım desenleri ile entegrasyonunu incelemek önerilir. Küçük projelerde uygulama yaparak pratik kazanmak, bu konseptleri gerçek sistemlerde güvenle kullanmanıza olanak sağlar. Kaynaklar arasında Python resmi belgeleri, forumlar ve açık kaynak projeler bulunur.

🧠 Bilginizi Test Edin

Başlamaya Hazır

Bilginizi Test Edin

Bu konudaki anlayışınızı pratik sorularla test edin.

4
Sorular
🎯
70%
Geçmek İçin
♾️
Süre
🔄
Deneme

📝 Talimatlar

  • Her soruyu dikkatle okuyun
  • Her soru için en iyi cevabı seçin
  • Quiz'i istediğiniz kadar tekrar alabilirsiniz
  • İlerlemeniz üstte gösterilecek