kurosaki-shinpachi
Centipat
- Katılım
- 13 Mayıs 2020
- Mesajlar
- 33
Merhaba, kafam şu self ile __init__'i bir türlü almıyor. Bunlar olmazsa olmaz mı? Python biliyorum demek için bunları bilmek lazım mı? Bana anlatabilecek var mı nedir bunlar?
sorum yok siz çok güzel anlatıyorsunuzda ben anlamıyorum :d"Self" ve "__init__" class'ın temelidir. Direkt python'dan başladıysan kodlamaya Object oriented kısımda kafan karışmış muhtemelen. Class dediğimiz şey nedir? Class kendi oluşturduğun bir veri yapısıdır. Python'da veri yapıları da yok ancak Yani var da arka planda çalışıyor sen görmüyorsun. Kısa özet şu, classlar içlerinde birden fazla veri yapısı tutabilirler.
Örnek: Mesela bir "ülke" classın olsun. Bu classın içinde;
Metin olarak (string) bir "ülke ismi" tutabilirsin,
Sayı olarak bir"şehir sayısı" tutabilirsin,
Yine metin olarak (string) bir "başkent" tutabilirsin.
Yani birden fazla veri tutabileceğin için "a = türkiye" gibi bir şey yapamazsın. Öncelikle constructor'ın anlamını bilmen lazım. Constructor inşa eden demek. Yani özel verisi yapısı olduğu için onu inşa edendir. Yani özel veri yapını inşa eden fonksiyondur. Her classın içinde mutlaka bir "__init__" vardır ve bu classı inşa eder. Sen "__init__" fonksiyonu yazmasan bile gizli boş bir "__init__" fonksiyonu vardır ve classın içindeki tüm değerlere null atar. (Bazı dillerde atmaya da biliyor O yüzden tanımlamak önemli)
Bir classın adının yanına parantez açtığın zaman o classın constructor methodunu çağırıyorsun demek. Yani "__init__"ini. Daha da yani şöyle tanımlama yapman gerekiyor.
a = ülke()
Şimdi sen "a" adında bir ülke veri yapısı tanımladın. Bunun ismi, başkenti ve şehir sayısı null atandı. Yani boş. Hiçbir işe yaramaz, ya da elle tek tek girmen lazım. Nasıl mı? Şöyle.
a.ülkeİsmi = "türkiye"
a.sehirSayisi = 81
a.baskent = "ankara"
gibi. İşte bunla tek tek uğraşmamak için (Ve genelde classın verileri korunur. Bunu java öğrenmeye çalışırsan göreceksin) kendi constructor methodumuzu tanımlıyoruz. Mesela ülke classının içinde şöyle bir contructor fonksiyonu olsaydı;
def __init__(self, isim, sehirSayisi, baskent):
self.ülkeİsmi = isim
self.sehirSayisi = sehirSayisi
self.baskent = baskent
Not : eşitliğin sağ tarafı fonksiyonun parametreleridir. Sol tarafı ise classın içine tanımladığın veriler.
Böyle bir constructor methodu ile her şeyi daha hızlı tanımlayabilirdik. Constructor classımız self hariç 3 veri alıyor. Yani ülkeyi şöyle oluşturacaktık bu sefer;
a = ülke("türkiye",81,"ankara")
hop bitti.
Şimdi self'e gelelim. Yukarıda da gördüğün gibi, classın kendi veri isimleriyle classın fonksiyonlarının aldığı veri isimlerinin aynı olması durumunda (ki genelde contructor method'da aynı isimleri kullanırız bizden sonra okuyan kişi daha kolay anlasın diye) "self"i kullanıyoruz. Self nedir, kısaca benim demek. self.baskent dediğin zaman, benim başkenti değerim demek. baskent dediğin zaman varsa fonksiyon parametrelerindeki başkent demek. O yüzden self kullanıyoruz.
self.baskent = baskent gibi. Fonksiyon parametresi olan başkenti, benim içimdeki veri yapısı olan başkente ata şeklinde.
En başta kısaca dedim, daha uzun yazmak gibi bir amacım vardı ama saat gece 3 olmuş ve vaktim yok daha fazla. Sorun olursa mesaj atabilirsin.
Daha az uykusuz bir şekilde tekrar deneyeyim o zaman Madde madde olunca şahsen ben daha kolay anlıyorum o yüzden öyle yazacağım.sorum yok siz çok güzel anlatıyorsunuzda ben anlamıyorum :d
Bu sitenin çalışmasını sağlamak için gerekli çerezleri ve deneyiminizi iyileştirmek için isteğe bağlı çerezleri kullanıyoruz.