19 Eylül 2017 Salı

Sınıflar ve Nesneler

Python nesneye dayalı bir programlama dilidir. İngilizce kaynaklarda Object Oriented olarak bahsedilir. Python'da aslında her şey bir nesnedir. Tanımladığınız fonksiyonlar, değişkenler, veri tipleri aklınıza gelen her şey. Peki sınıf ve nesne kavramı nedir? Bunu bir örneklendirme ile anlatmaya çalışalım. Ülkelere baktığımızda her ülkenin aynı özelliklere, farklı değerlerde sahip olduğunu görüyoruz. Bu özellikler ülke nüfusu, gelişmişlik düzeyi, insan gücü, yönetim biçimi gibi sayılabilir. Bu özellikler her ülkede vardır. Ancak bu özelliklerin değerleri ülkeden ülkeye değişiklik gösterir. Kanada'nın nüfusu 36 milyon iken, Finlandiya'nın 5 milyondur. Bu yaptığımız örneklendirmeye göre ülke aslında bir sınıf, Kanada ve Finlandiya ise bu sınıfın nesneleridir. Şimdi bir sınıf oluşturalım:
class Ulke():
    nufus = 1000000
    gelismislik_duzeyi = "Yüksek"
    insan_gucu = 45000
    yonetim_bicimi = "Demokrasi"
Yukarıda tanımladığımız sınıfta, Ulke sınıfından üretilen her nesne aynı özelliklere ve aynı değerlere sahip olacaktır. Ülkeler hakkında bilgi almak için sınıf içerisine bilgi_al fonksiyonu ekliyoruz.
class Ulke():
    nufus = 1000000
    gelismislik_duzeyi = "Yüksek"
    insan_gucu = 45000
    yonetim_bicimi = "Demokrasi"

    def bilgi_al(self):
        print("""
        Nüfus: {}
        Gelişmişlik Düzeyi: {}
        İnsan Gücü: {}
        Yönetim Biçimi: {}
        """.format(self.nufus,self.gelismislik_duzeyi,self.insan_gucu,self.yonetim_bicimi))

Kanada = Ulke()
Finlandiya  = Ulke()

Kanada.bilgi_al()
Finlandiya.bilgi_al()
bilgi_al fonksiyonu(sınıf metotu) eklenmiştir. Peki neden fonksiyon parametresinde self kullanıldı? self, bir referanstır ve sınıf içerisinde yazılan her fonksiyonun parametresinde ilk olarak yazılmalıdır. Aksi durumda hata ile karşılaşırız. self referansı, sınıftan üretilen nesnenin kendisini temsil eder aslında. Birazdan daha açık şekilde bunun üzerinden geçeceğiz.

Yukarıdaki kodda bir nesnenin sınıftan nasıl oluşturulduğunu gördük.Kanada = Ulke(). Oluşturulan her iki nesneden de bilgi almak için sınıf içerisinde yer alan bilgi_al metotunu kullandık.Kanada.bilgi_al(). Yukarıdaki kod çalıştırıldıktan sonra her iki nesneninde aynı bilgilere sahip olduğunu gördük. 
Nüfus: 1000000
Gelişmişlik Düzeyi: Yüksek
İnsan Gücü: 45000
Yönetim Biçimi: Demokrasi

Nüfus: 1000000
Gelişmişlik Düzeyi: Yüksek
İnsan Gücü: 45000
Yönetim Biçimi: Demokrasi
Ülke sınıfında üretilen her ülke nesnesinin farklı bilgilere sahip olması için sınıf içerisinde kurucu fonksiyon kullanmalıyız.

__init__() Kurucu Fonksiyon

__init__ Python programlama dilinde kurucu fonksiyondur. Sınıf tanımladığınız anda Python varsayılan olarak arkaplanda __init__ fonksiyonunu çalıştırmaktadır. Ancak eğer biz sınıf içerisinde __init__ fonksiyonunu tanımlarsak varsayılan __init__ fonksiyonu kullanılmaz. Kurucu fonksiyonlar, farklı değerlere sahip nesneler üretmemizi sağlar. Ulke sınıfına kurucu fonksiyonumuzu ekleyelim.
class Ulke():
    def __init__(self,isim,nufus,gelismislik_duzeyi,insan_gucu,yonetim_bicimi):
        self.isim = isim
        self.nufus = nufus
        self.gelismislik_duzeyi = gelismislik_duzeyi
        self.insa_gucu = insan_gucu
        self.yonetim_bicimi = yonetim_bicimi

    def bilgi_al(self):
        print("""
        Nüfus: {}
        Gelişmişlik Düzeyi: {}
        İnsan Gücü: {}
        Yönetim Biçimi: {}
        """.format(self.nufus,self.gelismislik_duzeyi,self.insan_gucu,self.yonetim_bicimi))
Kurucu fonksiyonumuzu ekledikten sonra sınıftan nasıl nesne üreteceğimize bakalım. Öncelikle Kanada ve Finlandiya isimli iki tane nesne oluşturuyoruz. Ancak bu sefer argüman kısmını aşağıdaki gibi kurucu fonksiyonumuzun parametrelerine uygun olacak şekilde dolduruyoruz.
Kanada = Ulke("Kanada", 36000000, "Yüksek", 100000, "Demokrasi")
Finlandiya = Ulke("Finlandiya", 5000000, "Çok Yüksek", 58000, "Demokrasi")

Kanada.bilgi_al()
Finlandiya.bilgi_al()
Eğer kullanıcı nesne oluştururken argümanları eksik girerse kurucu fonksiyonunu parametre değerlerini aşağıdaki gibi varsayılan olarak değer atayabiliriz.
class Ulke():
    def __init__(self,isim="-",nufus="-",gelismislik_duzeyi="-",insan_gucu="-",yonetim_bicimi="-"):
        self.isim = isim
        self.nufus = nufus
        self.gelismislik_duzeyi = gelismislik_duzeyi
        self.insa_gucu = insan_gucu
        self.yonetim_bicimi = yonetim_bicimi

Nesne Silme

Nesne silmek için del operatörü kullanılır.
>>> Kanada
<__main__.Ulke object at 0x03262D10>
>>> del Kanada
>>> Kanada
Traceback (most recent call last):
  File "", line 1, in 
    Kanada
NameError: name 'Kanada' is not defined

Hiç yorum yok:

Yorum Gönder