Python’da Kalıtım (Inheritance)

Bir sınıf tanımlaması yapıldığını düşünelim; bu sınıf yapısı içerisindeki tüm elemanlar (fonksiyonlar, değişkenler, veri tipleri, metotlar, özellikler gibi) o sınıfa ait birer elemandır. Python dışındaki nesne tabanlı programlama (C#, C++, Java gibi) yapılarında bir sınıfa ait üyelere erişim için “ public ”, “private ” ve “protected ” gibi belirteçler kullanılmaktadır. Python programlama dilinde de sınıf üyeleri için kullanılan belirteçlerde aynı yapıda; gizli (private), yarı gizli (semi- private) ve açık (public) olmak üzere üç grupta incelenmektedir. Eğer bir sınıf elemanının önünde tek alt çizgi (_) varsa yarı gizli (semi- private), çift alt çizgi (__) varsa gizli (private), hiç çizgi yoksa kullanılmamış ise açık (public) belirteç türündedir.

Dekoratörler bir yazılımın desenini oluşturan yapılardır. Dekoratörler bir sınıfın fonksiyonlarını, metotlarını veya sınıflarını fonksiyonellik açısından değiştirmek için kullanılır. Dekoratörler bu işlemleri gerçekleştirirken alt sınıfların oluşturulmasına veya kullanılmasına gerek yoktur. Dekoratörlerin kullanım amaçlarından birisi yapısını değiştirmek istemediğimiz fonksiyonların veya metotların işlevlerini yada davranışlarını değiştirmektir. Bir dekoratör tanımlanırken “@” simgesi kullanılmaktadır.

@property dekoratörü: Property kelime anlamı olarak “özellik” anlamına gelmektedir. Dekoratör olarak kullanımı bir sınıf içerisindeki metodu özellik haline getirip, kullanıma sunmak için kullanılmaktadır.

Kalıtım: Bir ana sınıfa ait bileşenlerin oluşturulan alt sınıflara miras olarak bırakılmasına kalıtım (inheritance) denir.

Bir alt sınıf özelliklerini taşıdığı üst sınıfın işlevlerini değiştirebilir. Bu duruma overriding (üzerine yazma) denir.

Bir alt sınıftan birden fazla üst sınıf oluşturulması işlemine çoklu kalıtım (multi inheritance) denilmektedir.

Python programlama dilinde bir alt sınıfa ait birden fazla üst sınıf durumunun olmasına çoklu kalıtım (multi inheritance) denir. Çoklu kalıtımda; birden fazla üst sınıfın özelliğini kendi içerisinde barındırdığı durumlardır.

Bir sınıfın özelliklerinin aranma sıralaması yapılmasına sınıfın doğrusallaştırılması denir. Bu sıranın bulunması için kullanılan kurallar kümesine ise Yöntem Çözünürlük Sırası (MRO) denir. Bu yöntem “__mro__” veya “mro” olarak gösterilebilir.

Sarmalama veya paketleme olarak da bilinen kapsülleme (encapsulation) bir sınıfın içeriğinin gizlenerek dışarıya sadece istenilen özellik veya fonksiyonların gösterilmesi işlemine denir. Veriye doğrudan erişim sağlanmaz, yalnızca getter veya setter gibi metotlar yada fonksiyonlar ile erişim sağlanır ve sınırlı biçimde değişiklik yapılmasına imkan tanınır.

Yunanca kökenli olan “Poly” (çok) ve “Morpho’s” (şekil) anlamına gelen polymorphism kelimesi çok biçimlilik anlamına gelmektedir. Tanımlanan nesnelerin olaylar karşısında çeşitli davranışlarda bulunmasına çok biçimlilik (polymorphism) denir. Amaç nesnelerin aynı olay üzerinde farklı davranışlar sergileme yeteneğinin geliştirilmesidir. Polymorphism; programlama yapısında birden fazla davranış biçimine sahip tek bir nesne tanımlaya fırsat tanımaktadır.

Kullanıcıdan yada başka bir programdan gereksiz detayların gizlenerek ve sadece gerekli duyulan özelliklerin gösterilmesine soyutlama (abstraction) denir.