Selamlar. Bu yazının konusu Python delattr fonksiyonu nedir olacak arkadaşlar. Bir önceki yazı complex hakkındaydı. Bu yazıda nesnelerden attribute silmemize imkan tanıyan bir fonksiyonu tanıyacağız. Daha farklı bir alternatif ile olan karşılaştırmasını da çok zaman önce stackoverflowda gezinirken görmüştüm. Ona da değiniriz.
Python delattr fonksiyonu nedir?
Arkadaşlar girişte de bahsettim ama tekrar bahsedeyim. Bu fonksiyon nesnelerden attribute silmenize imkan tanır. Direkt olarak gidip de ben bunu sileceğim diyemezsiniz. Resmi dokümanda da zaten izin veren nesnelerden bahsediyor.
Bunun yerine kullanılabilecek olan del keywordü de aynı işlemi gerçekleştirmektedir. Fakat del keywordü ile çalışırken izin var mı yok mu gibi derdiniz bulunmamakta. Bu izin olayı delattr için bulunmakta. Bir diğer karşılaştırmada ise del keywordü ile çalışıldığında hem daha açık bir sözdizim hem de daha verimli bir kod yapısı ortaya çıkmış oluyor. Bunu stackoverflow üzerinden kaynak vererek belirteyim.
Kullanım
Genelde sınıflar üzerinden kullanımlara örnekler yaygın olduğu için biz de öyle yapacağız. Örneğin iş başvurularını değerlendireceğimiz aşağıdaki gibi bir sınıfımız olsun.
class IsBasvurulari: Adi = 'Ali' Soyadi = 'GOREN' Yasi = 24 TuttuguTakim = 'Fenerbahce'
Bir iş görüşmesinde kişisel sorular gereksizdir bilindiği üzere. Bunların olmaması o soru kümesinden çıkartılması gerekmektedir. Diyelim ki biz burada bu işi sınıf üzerinde de yapacağız. Yani takım bilgisi bizim için bu aşamada gereksiz. Nasıl çıkartırız? Cevap şöyle oluyor:
print(IsBasvurulari.TuttuguTakim) delattr(IsBasvurulari, 'TuttuguTakim') print(IsBasvurulari.TuttuguTakim)
Yukarıda en son kod bize AttributeError fırlatacaktır. Çünkü böyle bir attribute bu sınıfta bulunmamaktadır. Bunu gelin bir de del keywordü ile yapalım.
class IsBasvurulari: Adi = 'Ali' Soyadi = 'GOREN' Yasi = 24 TuttuguTakim = 'Fenerbahce' print(IsBasvurulari.TuttuguTakim) del IsBasvurulari.TuttuguTakim print(IsBasvurulari.TuttuguTakim)
Aynı şekilde çalışmaktadır. Tabii delattr kullanırsanız dictionary hata fırlatacaktır. Bu yüzden dictionary işlemlerinde del kullanabiliriz.
kisi = { 'adi': 'Ali', 'soyadi': 'GOREN', 'takim': 'Fenerbahce' } print(kisi) del kisi['takim'] print(kisi)
Burada gördüğümüz gibi takim adındaki keyword kisi isimli dictionary’den silinmiş durumda.
del ve delattr Farkı Nedir?
Stackoverflow üzerinde karşılaştırma yapan Miles isimli vatandaşın makinesinde 2 kullanım arasında 15 mikrosaniyelik bir fark varmış. İlk örnekte del keywordünün sadece 2 adet bytecode instruction’ı derlediğini söylerken delattr’ın 5 adet instruction derlediğini söylüyor.
Eğer bir attribute’ü dinamik olarak silmek istiyorsanız delattr kullanmanız gerekmekte. Örnek:
class Kisi: Ad = 'Ali', Soyad = 'GOREN', Yas = 24, Takim = 'Fenerbahce' for attr in [i for i in Kisi.__dict__.keys() if i[:1] != '_']: delattr(Kisi, attr) print(dir(Kisi))
Yukarıdaki yöntemde sadece sistemden miras alınan attributeları göreceğiz. Oluşturduğumuz herhangi bir fonksiyon ya da attribute’u görmeyeceğiz. Evet arkadaşlar. Umarım bu yazı faydalı bir yazı olmuştur. Eğer eksik ya da hatalı bir nokta var ise yorumla belirtmeniz durumunda yazıda düzeltme yaparım.
Okuduğunuz için teşekkür ederim. İyi çalışmalar.