Python, bir sınıfın başka bir sınıfın alt sınıfı olup olmadığını kontrol etmemizi sağlayan issubclass()
adlı yerleşik bir işleve sahiptir. Başka bir deyişle, bir sınıfın başka bir sınıftan miras alıp almadığını kontrol eder. Miras kavramı, nesne yönelimli programlamada önemlidir. Sınıflar arasında ilişki kurulmasına olanak tanır ve kodun yeniden kullanılmasını ve çok biçimliliği sağlar.
İşlev nasıl çalışır ve sözdizimi nedir?
issubclass() işlevi Python’da yerleşik bir işlevdir ve iki parametre alır: sınıf
ve classinfo
. Fonksiyon, sınıf classinfo’nun bir alt sınıfı ise True
, aksi takdirde False
döndürür. Fonksiyonun söz dizimi aşağıdaki gibidir:
issubclass(sinif, classinfo)
Burada sinif
, classinfo
‘nun bir alt sınıfı olup olmadığını kontrol etmek istediğiniz sınıftır. classinfo
parametresi bir sınıflar demeti olabilir; bu durumda, sinif
, demetteki sınıflardan herhangi birinin alt sınıfıysa fonksiyon True
değerini döndürür.
Örneğin, bir Superhero
sınıfımız ve Superhero
‘dan miras alan bir Superman
sınıfımız olduğunu varsayalım. Superman
‘in Superhero
‘nun bir alt sınıfı olup olmadığını issubclass()
fonksiyonunu kullanarak aşağıdaki gibi kontrol edebiliriz:
class Superhero:
pass
class Superman(Superhero):
pass
print(issubclass(Superman, Superhero)) # True
Burada Superman
sınıfının Superhero
sınıfının alt sınıfı olup olmadığını issubclass(Superman, Superhero) ile kontrol ettiğimizi ve Superhero
sınıfının bir alt sınıfı olduğu için True
döndürdüğünü görebiliriz.
Örneklerle issubclass() fonksiyonunun kullanımı
Kodunuzda issubclass()
fonksiyonunu nasıl kullanabileceğinize dair birkaç örneğe bakalım:
Örnek 1:
class EvcilHayvan:
pass
class Kedi(EvcilHayvan):
pass
class Kopek(EvcilHayvan):
pass
# Kedi'nin EvcilHayvan'ın alt sınıfı olup olmadığını kontrol etprint(issubclass(Kedi, EvcilHayvan)) # True
# Kopek'in EvcilHayvan'ın alt sınıfı olup olmadığını kontrol edin
print(issubclass(Kopek, EvcilHayvan)) # True
İlk örnekte, bir EvcilHayvan
sınıfı ile Kedi
ve Kopek
alt sınıfı tanımladık. Daha sonra Kedi
ve Kopek
‘in EvcilHayvan
‘ın alt sınıfları olup olmadığını kontrol etmek için issubclass()
fonksiyonunu kullandık. Beklendiği gibi, issubclass()
işlevine yapılan her iki çağrı da True
değerini aldık.
Örnek 2:
class Araba:
pass
class Mercedes(Araba):
pass
class BMW(Araba):
pass
class Audi(Araba):
pass
class VW(Araba):
pass
# Audi'nin Mercedes'in alt sınıfı olup olmadığını kontrol etprint(issubclass(Audi, Mercedes)) # False
# Mercedes'in (BMW, Audi, VW) alt sınıfı olup olmadığını kontrol et
print(issubclass(Mercedes, (BMW, Audi, VW))) # False
İkinci örnekte, bir Araba
sınıfı ve Mercedes
, BMW
, Audi
ve VW
olmak üzere dört alt sınıf tanımladık. Audi
‘nin Mercedes
‘in bir alt sınıfı olup olmadığını ve Mercedes
‘in tuple’daki (BMW, Audi, VW)
sınıflardan herhangi birinin alt sınıfı olup olmadığını kontrol etmek için issubclass()
fonksiyonunu kullandık. Beklendiği gibi, issubclass()
fonksiyonuna yapılan her iki çağrı da False
döndü. Çünkü Audi
, Mercedes
‘in alt sınıfı değil ve Mercedes
de tuple’daki sınıflardan herhangi birinin alt sınıfı değil.
Örnek 3:
class Kitap:
pass
class Roman(Kitap):
pass
class Tarih(Kitap):
pass
class Fantezi(Roman):
pass
class BilimKurgu(Roman):
pass
# Fantezi'nin Roman'ın alt sınıfı olup olmadığını kontrol et
print(issubclass(Fantezi, Roman)) # True
# BilimKurgu'nun Tarih'in alt sınıfı olup olmadığını kontrol et
print(issubclass(BilimKurgu, Tarih)) # False
Bu son örnekte, bir Kitap
sınıfı, Roman
ve Tarih
olmak üzere iki alt sınıf ve Roman
sınıfının Fantezi
ve BilimKurgu
olmak üzere iki alt sınıfını tanımladık. Fantezi
‘nin Roman
‘ın bir alt sınıfı olup olmadığını ve BilimKurgu
‘nun Tarih
‘in bir alt sınıfı olup olmadığını kontrol etmek için issubclass()
fonksiyonunu kullanıyoruz. Beklendiği gibi, issubclass()
fonksiyonuna yapılan ilk çağrı True
, ikinci çağrı ise False
döndürür çünkü BilimKurgu
, Roman
‘ın bir alt sınıfıdır ancak Tarih
‘in değil.
Bu üç örnek issubclass()
fonksiyonunu kodunuzda nasıl kullanabileceğinize dair temel birkaç örnek. Ancak bu fonksiyonu projelerinizde kullanmanın daha birçok yolu bulunur. Bir sonraki bölümünde, fonksiyonun uygulama açısından yaygın kullanım durumlarını tartışacağız.
Uygulama açısından bu işlev için yaygın kullanım durumları nelerdir?
Gerçek dünya uygulamalarında issubclass()
işlevi için birkaç yaygın kullanım durumu bulunur:
- Nesne yönelimli programlama:
issubclass()
fonksiyonunun en önemli kullanım alanlarından biri, bir sınıfın başka bir sınıftan miras alıp almadığını kontrol etmektir. Bu, nesne yönelimli programlamada temel bir kavramdır ve sınıflar arasında ilişki kurulmasına, kodun yeniden kullanılmasına ve çok biçimliliğe olanak tanır. - Dinamik sınıf yükleme:
issubclass()
fonksiyonu, belirli kriterlere göre çalışma zamanında sınıfları dinamik olarak yüklemek için kullanılabilir. Örneğin, bir sınıfın objesini oluşturmadan önce belirli bir arayüzün alt sınıfı olup olmadığını kontrol etmek içinissubclass()
işlevini kullanabilirsiniz. - Tür kontrolü: Çalışma zamanında bir nesnenin türünü kontrol etmek için de kullanılabilir. Örneğin, bir nesne üzerinde belirli bir yöntemi çağırmadan önce nesnenin belirli bir sınıfın örneği olup olmadığını kontrol etmek için
issubclass()
işlevini kullanabilirsiniz. - Test: Bir sınıfın bir arayüzü doğru şekilde uygulayıp uygulamadığını veya bir üst sınıftan miras alıp almadığını kontrol etmek için birim testinde kullanılabilir.
Genel olarak, issubclass()
Python’da çok kullanışlı bir fonksiyondur ve kodunuzu daha sağlam ve sürdürülebilir hale getirmek için birçok farklı şekilde kullanılabilir.