Bu konuda artık kendi veri tiplerimizi ve objelerimizi üretmeye başlayacağız.
Kendi veri tiplerimizi oluşturmak ve bu veri tiplerinden objeler üretmemiz için öncelikle objeleri üreteceğimiz yapıyı tanımlamamız gerekiyor. Bunu tasarladığımız yapıya da sınıf veya ingilizce ismiyle class diyoruz. Şimdi class yapılarını öğrenerek konumuza başlayalım.
Sınıflar veya Classlar objelerimizi oluştururken objelerin özelliklerini ve metodlarını tanımladığımız bir yapıdır ve biz herbir objeyi bu yapıya göre üretiriz. İsterseniz bir Araba classı tanımlayarak yapımızı kurmaya başlayalım.
# Yeni bir Araba veri tipi oluşturuyoruz.
class Araba():
model = "Renault Megane"
renk = "Gümüş" # Sınıfımızın özellikleri (attributes)
beygir_gücü = 110
silindir = 4
Sınıfımızı Pythonda tanımladık. Peki bu sınıftan obje nasıl oluşturacağız ? Bunu da şu şekilde yapabiliyoruz.
----------------------------------------------------------------------------------------------------------------------------
obje_ismi = Sınıf_İsmi(parametreler(opsiyonel))
----------------------------------------------------------------------------------------------------------------------------
araba1 = Araba() # Araba veri tipinden bir "araba1" isminde bir obje oluşturduk.
araba1 # Objemizin veri tipi Araba
<__main__.Araba at 0x8b9f76f860>
type(araba1)
__main__.Araba
araba1 objesi artık sınıfta tanımladığımız bütün özelliklere (attributes) sahip olmuş oldu. İşte sınıf ve obje üretmek bu şekilde olmaktadır. Peki bu araba objesinin özelliklerinin nasıl görebiliriz ?
--------------------------------------------------------------------------------------------------------------------------
obje_ismi.özellik_ismi
--------------------------------------------------------------------------------------------------------------------------
araba1.model
'Renault Megane'
araba1.renk
'Gümüş'
araba1.beygir_gücü
110
araba1.silindir
4
Şimdi de başka bir Araba objesi oluşturalım.
araba2 = Araba()
araba2.model
'Renault Megane'
araba2.renk
'Gümüş'
araba2.beygir_gücü
110
araba2.silindir
4
Burda gördüğümüz gibi oluşturduğumuz objelerin buradaki model,renk vs. gibi özelliklerinin değeri aynıdır. Çünkü aslında burada tanımladığımız özellikler birer sınıf özelliğidir. Yani biz bir obje oluşturduğumuzda bu özelliklerin değerleri varsayılan olarak gelir. Bu özelliklerin değerlerine , herhangi bir obje oluşturmadan da erişebiliriz. Bunu da şu şekilde yapabiliriz.
Araba.renk # Class_İsmi.özellik_ismi
'Gümüş'
Araba.beygir_gücü
110
Bizim her bir objeyi başlangıçta farklı değerlerle oluşturmamız için her bir objeyi oluştururken objelerin değerlerini göndermemiz gerekiyor. Bunun için de özel bir metodu kullanmamız gerekmektedir. ---------------------------------------------------------------------------------------------------------------------------- init() ----------------------------------------------------------------------------------------------------------------------------
Peki bu metod ne anlama geliyor ? İsterseniz ilk olarak *dir()* fonksiyonu yardımıyla araba1 objemizde neler var bakalım.
dir(araba1)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'beygir_gücü', 'model', 'renk', 'silindir']
Burada objemizin tüm özelliklerini ve metodlarını görüyoruz. Ancak biz herhangi bir metod tanımlamamıştır. Buradaki metodlar Python tarafından bir obje oluşturulduğunda özel olarak tanımlanan metodlardır ve biz eğer özel olarak bunları tanımlamazsak Python kendisi bunları varsayılan tanımlıyor. Burada aynı zamanda init metodunu da görüyoruz. Eğer biz bu metodu kendimiz tanımlarsak objelerimizi farklı değerlerle başlatabiliriz.
Aslında init metodu Pythonda yapıcı(constructor ) fonksiyon olarak tanımlanmaktadır. Bu metod objelerimiz oluşturulurken otomatik olarak ilk çağrılan fonksiyondur. Bu metodu özel olarak tanımlayarak objelerimizi farklı değerlerle oluşturabiliriz.
Peki bu metodu nasıl tanımlayacağız ? Direk örnek üzerinden görmeye çalışalım.
# Araba Veri tipi
class Araba():
# Şimdilik Class özelliklerine ihtiyacımız yok.
def __init__(self):
print("init fonksiyonu çağrıldı.")
araba1 = Araba() # araba1 objesi oluşurken otomatik olarak __init__ metodumuz çağrılıyor.
init fonksiyonu çağrıldı.
Peki burada self ne anlama geliyor ? self anahtar kelimesi objeyi oluşturduğumuz zaman o objeyi gösteren bir referanstır ve metodlarımızda en başta bulunması gereken bir parametredir. Yani biz bir objenin bütün özelliklerini ve metodlarını bu referans üzerinden kullanabiliriz.
Objeler oluşturulurken, Python bu referansı metodlara otomatik olarak kendisi gönderir. Özel olarak self referansını göndermemize gerek yoktur.
init metodunu ve self'i iyi anlamak için objelerimize özellikler ekleyelim.
class Araba():
def __init__(self,model,renk,beygir_gücü,silindir): # Parametrelerimizin değerlerini objelerimizi oluştururken göndereceğiz.
self.model = model # self.özellik_ismi = parametre değeri şeklinde objemizin model özelliğine değeri atıyoruz.
self.renk = renk # self.özellik_ismi = parametre değeri şeklinde objemizin renk özelliğine değeri atıyoruz.
self.beygir_gücü = beygir_gücü # self.özellik_ismi = parametre değeri şeklinde objemizin beygir_gücü özelliğine değeri atıyoruz.
self.silindir = silindir # self.özellik_ismi = parametre değeri şeklinde objemizin silndir özelliğine değeri atıyoruz.
# araba1 objesini oluşturalım.
# Artık değerlerimizi göndererek objelerimizin özelliklerini istediğimiz değerle başlatabiliriz.
araba1 = Araba("Peugeot 301","Beyaz",90,4)
# araba2 objesini oluşturalım.
araba2 = Araba("Renault Megane","Gümüş",110,4)
araba1.model
'Peugeot 301'
araba1.renk
'Beyaz'
araba2.model
'Renault Megane'
araba2.renk
'Gümüş'
İstersek init metodunu varsayılan değerlerle de yazabiliriz.
class Araba():
def __init__(self , model = "Bilgi Yok",renk = "Bilgi Yok",beygir_gücü = 75 ,silindir = 4):
self.model = model
self.renk = renk
self.beygir_gücü = beygir_gücü
self.silindir = silindir
araba1 = Araba(beygir_gücü = 85, renk = "Siyah")
araba1.renk
'Siyah'
araba1.model
'Bilgi Yok'
İşte burada gördüğümüz gibi bir objeyi init metodunu kendimiz yazarak farklı değerlerle oluşturabiliyoruz. Bir sonraki derste objelere kendi metodlarımızı nasıl yazacağımızı öğrenmeye çalışacağız.