Python’un getattr()
fonksiyonu nesneler ve nesnelerin nitelikleri ile çalışmak için kullanılır. Nesnenin özniteliğine, özniteliğin adı ile erişmenizi sağlar. Öznitelik ismi string olarak verilir. Bu özellikle dinamik özniteliklerle çalışırken veya erişmek istediğiniz özniteliğin tam adını önceden bilmediğiniz durumlarda yararlı olabilir.
Bu yazıda getattr()
fonksiyonunun ne yaptığına ve nasıl çalıştığına daha yakından bakacağız.
getattr() işlevi ne yapar?
getattr()
fonksiyonu, özniteliğin adını bir string olarak verdiğinizde nesnenin özniteliğine erişmenizi sağlayan yerleşik bir Python fonksiyonudur. İki bağımsız değişken alır: özniteliğine erişmek istediğiniz nesne ve erişmek istediğiniz özniteliğin string adı. Öznitelik mevcutsa, getattr()
işlevi özniteliğin değerini döndürür. Öznitelik mevcut değilse, getattr()
bir AttributeError
yükseltir.
Örneğin, isim
(ad) ve yas
(yaş) olmak üzere iki özniteliğe sahip basit bir Person
nesnesini tanımlayan aşağıdaki Python sınıfını düşünün:
class Person:
def __init__(self, isim, yas):
self.isim = isim
self.yas = yas
Person
sınıfının bir objesini oluşturup person
değişkenine atarsak, isim
ve yas
niteliklerine doğrudan erişebiliriz:
person = Person("Ahmet", 30)
print(person.isim) # "Ahmet"
print(person.yas) # 30
Alternatif olarak, aynı niteliklere erişmek için getattr()
fonksiyonunu kullanabiliriz:
print(getattr(person, "isim")) # "Ahmet"
print(getattr(person, "yas")) # 30
getattr() fonksiyonu nasıl çalışır ve söz dizimi nedir?
getattr()
fonksiyonu aşağıdaki sözdizimini kullanır:
getattr(object, oznitelik_adi)
Burada object
, özniteliğine erişmek istediğiniz nesne ve oznitelik_adi
ise erişmek istediğiniz özniteliğin adını içeren bir dizedir.
getattr()
işlevi, önce özniteliğin nesne üzerinde var olup olmadığını kontrol ederek çalışır. Eğer varsa, özniteliğin değerini döndürür. Öznitelik mevcut değilse, getattr()
bir AttributeError
yükseltir.
Örneklerle fonksiyonun kullanımı
getattr()
fonksiyonunu kodunuzda nasıl kullanabileceğinize dair örneklere bakalim:
Örnek 1: getattr() kullanarak bir niteliğe erişme
class Person:
def __init__(self, isim, yas):
self.isim = isim
self.yas = yas
person = Person("Ahmet", 30)
print(getattr(person, "isim")) # "Ahmet"
Örnek 2: getattr() ile AttributeError’i yakalama
class Person:
def __init__(self, isim, yas):
self.isim = isim
self.yas = yas
person = Person("Ahmet", 30)
try:
print(getattr(person, "meslek")) # AttributeError
except AttributeError:
print("Meslek bilgisi yok.") # "Meslek bilgisi yok."
Örnek 3: Dinamik bir niteliğe erişmek için getattr() işlevini kullanma
class Person:
def __init__(self, isim, yas):
self.isim = isim
self.yas = yas
person = Person("Ahmet", 30)
oznitelik_adi = "isim"
print(getattr(person, oznitelik_adi)) # "Ahmet"
oznitelik_adi = "yas"
print(getattr(person, oznitelik_adi)) # 30
Bu örnekte, person nesnesinin isim ve yas niteliklerine erişmek için getattr() işlevini kullanıyoruz, ancak nitelik adı bir oznitelik_adi
değişkeninde saklanıyor. Bu yöntem, niteliklere tam adlarını önceden bilmeden dinamik olarak erişmemizi sağlar.
Örnek 4: getattr() işlevini varsayılan değerle kullanma
class Person:
def __init__(self, isim, yas):
self.isim = isim
self.yas = yas
person = Person("Ahmet", 30)
meslek = getattr(person, "meslek", "bilinmiyor")
print(meslek) # "bilinmiyor"
Bu örnekte, person
nesnesinin meslek
niteliğine erişmeye çalışmak için getattr()
işlevini kullanıyoruz, ancak bu nitelik mevcut değil. Burada, getattr()
fonksiyonuna üçüncü argüman olarak “bilinmiyor” varsayılan değerini verdik. Bu, özniteliğin mevcut olmaması durumunda getattr()
fonksiyonunun hata vermek yerine varsayılan değeri döndüreceği anlamına gelir.
Örnek 5: getattr() işlevini bir fonksiyonla kullanma
class Person:
def __init__(self, isim, yas):
self.isim = isim
self.yas = yas
def bilgi_al(self):
return f"Isim: {self.isim}, Yas: {self.yas}"
person = Person("Ahmet", 30)
bilgi_metodu = getattr(person, "bilgi_al")
print(bilgi_metodu()) # "Isim: Ahmet, Yas: 30"
Bu örnekte, person
nesnesinin bilgi_al
yöntemine erişmek için getattr()
işlevini kullanıyoruz. getattr()
fonksiyonu ile metodu bir fonksiyon nesnesi olarak döndürebiliriz. Daha sonra metodu çalıştırmak için çağırabiliriz.
Uygulama açısından bu işlev için yaygın kullanım durumları nelerdir?
getattr()
işlevi için birkaç yaygın kullanım durumu bulunur:
- Dinamik özniteliklerle çalışırken, öznitelik adlarını doğrudan kodunuzda sabit olarak kodlamak yerine, adları değişkenlerde saklanan özniteliklere erişmek için
getattr()
işlevini kullanabilirsiniz. - Önceden erişmek istediğiniz niteliklerin tam adlarını bilmiyorsanız, bunlara erişmek için kullanabilirsiniz.
- Var olabilecek veya olmayabilecek bir nitelik için varsayılan bir değer sağlamak istediğinizde,
getattr()
işlevini varsayılan bir değerle kullanabilirsiniz. - Bir nesnenin yöntemine erişmek ve bir işlev olarak çağırmak için
getattr()
işlevini kullanabilirsiniz.
Çok sayıda nitelik ve yöntemle çalışırken şunları yapabilirsiniz:
- Niteliklere tek tek elle erişmek yerine programatik olarak erişip işlemek için,
- Harici kütüphaneler veya modüllerle çalışırken, bu niteliklerin ve yöntemlerin tam adlarını önceden bilmeseniz bile, niteliklerine ve yöntemlerine erişmek için,
- Serileştirilmiş verilerle çalışırken, serileştirilmiş nesnelerin özelliklerine dinamik olarak erişmek için,
- Python’da gelişmiş yansıma ile çalışırken, bir nesnenin niteliklerine, yöntemlerine ve özelliklerine erişmek için
getattr()
işlevini kullanabilirsiniz.
Özet olarak getattr()
fonksiyonu Python’da nesneler ve nesnelerin nitelikleri ile çalışmak için güçlü bir araçtır. Niteliklere dinamik olarak ve varsayılan bir değerle erişmenizi sağlar. Nesne özelliklerine programatik olarak erişmeniz gereken birçok durumda yaygın olarak kullanılır.