Py #2 Operator Overloading Nedir?

Göker Güner
2 min readApr 5, 2021

Merhabalar,

Python dilinin kullanışlı ve pek bilinmeyen özelliklerine değindiğimiz serinin ikinci yazısında oldukça pratik kullanım alanları olabilen Operator Overloading kavramından bahsedeceğiz. Bu kavrama genellikle İngilizce olarak denk geleceğiniz için Türkçesini kullanmıyoruz.

Eğer bu yazı dizisinin İngilizcesiyle ilgilenmiyorsanız, bu paragrafı pas geçebilirsiniz.

Hello, in the second article of the series where we talk about the useful and unknown features of the Python language, we will talk about the concept of Operator Overloading, which can be quite practical.

For English version of this article: Link

Python, neredeyse istediğiniz her şeyi yapabileceğiniz bir yazılım dilidir.

Python, oldukça geniş bir komüniteye ve zengin bir kütüphane çeşitliliğine sahip olduğu için neredeyse istediğiniz her şeyi yapabileceğiniz bir yazılım dilidir. Ancak, bu çeşitlilikler dışında dilin kendine ait kullanışlı özellikleri de vardır. Operator Overloading, bu özelliklerden biridir.

Bu özelliği kısaca operatörlerin sahip olduğu özelliklere yeni özellikler eklenmesi olarak tanımlayabiliriz.

İlk olarak, Python’un built-in metodlarından biri olan dir() fonksiyonunu kullanarak int veri tipinin metod ve özelliklerine yakından bakalım.

Bu yazıda, konumuz için örnek olarak __add__ ve __repr__ metodlarını kullanacağız. Metodların ne işe yaradığını görmek için ise help() fonkisyonunu aşağıdaki gibi kullanabilirsiniz.

Bu metod, bildiğimiz toplama işlemini yapar.

Metodun kullanımına örnek olarak bu şekilde yazdım. Python diline başlangıç seviyesinde aşina herkesin bildiği gibi bu metodu “3+5” yazarak da kullanabilirdim.

__repr__ metodu da, print() fonksiyonunun çalışma şeklini, yani aldığı değişkenin nasıl gösterileceğini belirler.

Bu metodlar int veri tipine ait metodlardır, bu yüzden overloading yapmak istediğimizde bunu bir classın içerisinde yapmamız gerekir. Hiçbir yere ait olmadan yapmak istediğimizde;

Hiçbir etki yaratmadığını görürüz. Bu metodların aldığı self parametresinin bize anlatmak istediği budur, manipüle edilebilmek için bir sınıfa ait olmalıdır. Şimdi örnek çalışmamıza geçelim.

Order adını verdiğimiz bir class(sınıf) yaratıyoruz. Bu sınıf basitçe, bir sipariş listesi alarak oluşturulacak. Sınıfımızı initialize ederken verdiğimiz * args değişkeni sayesinde, listemiz istediğimiz uzunlukta olabilir.

Ardından, overload etmek istediğimiz metodları tanımlıyor ve bunun ne şekilde yapılacağını belirliyoruz. Örneğin add metodunu kullandığımızda, eklemek istediğimiz yeni elemanı ilk listemize “append” edecek. Normalde bu işlemi yapmak istediğimizde;

Bir listeye, sadece bir listenin eklenebileceğine dair bir hata mesajı alırız. Ancak toplama işlemini sınıfımız içinde overload ederek ona bu yeteneği kazandırıyoruz.

Diğer bir overloading işlemimiz de _ repr _ metodumuzla ilgili. Yine sınıfımız içerisinde tanımladığımız metoda header ismiyle tanımladığımız stringtipindeki değişkeni ekliyoruz. Böylece bu sınıfa ait bir değişkeni, yani bir sipariş listesini ekrana yazdırmak istediğimizde başına “Order List: “ başlığını koyarak yazdıracak.

Listemizi, normal bir Python listesi olarak ekrana yazdırmak istediğimizde;

Şeklinde bir çıktı alıyoruz. Sırada overloading işlemlerimizin çıktılarını görmek var. Tanımladığımız sınıfa ait değişkenimizi tanımlayarak başlayalım.

İlk overloading işlemimizin işe yarayıp yaramadığını görmek için, listemizin mevcut halini ekrana yazdırmayı deneyelim.

Şimdi de, az önce yapmak isterken hata aldığımız işlemi tekrar yapmayı deneyelim,

Böylece, seçtiğimiz iki metodu, tanımladığımız sınıf içerisinde değiştirerek onlara yeni yetenekler kazandırdık. Sonraki çalışmalarımızda görüşmek üzere.

--

--

Göker Güner

YTU Alumni. ML Ops & Engineer at AlternaCX. Data&AI Enthusiast. MS Student at Bahcesehir University AI Program with Thesis.