Yaklasik 4 yil once Python ile birseyler yapmaya basladigimda bazi kavramlar kafami oldukca fazla karistirmisti. Bunun sebebi aslinda OOP temelli ciddi bir projeye o gune kadar ugrasmis oldugum Java ve C++ programlama dilleri ile imza atmamis olmamdi. Her ne kadar is goren ve problemi cozen isler yapiyor olsam da OOP altyapisindan genellikle uzak kaliyordum. Fakat Python ile giristigim isler beni OOP tarafina bir nevi mecbur kildi ve Python’daki bazi kavramlari daha detayli ogrenmeye kalkismistim. Aslinda OOP tarafinda ciddi bir temeli olan birileri icin Python’in getirdigi kavramlar cok farkli ya da yeni degil.
Bu bahsettigim kavramlarin basinda genellikle cogu sinifa ait metotlarin ilk parametresi olan self parametresi geliyor. Fakat bu kavramlari aciklamaya daha kolay anlasilacagindan ornek uzerinden devam etmek istiyorum. Bunun icin OOP orneklerinde siklikla kullanilan musteri sinifi uzerinden asagidaki kod ile durumu orneklemek istiyorum.
''' Created on 14 Jan 2017 @author: Ibrahim Ozturk @author: www.ozturkibrahim.com ''' class Musteri(object): """Bir banka musterisinin hesabindaki tutari kontrol etme. Musteri sinifi asagidaki ozelliklere sahiptir : Ozellikler: isim : Musteri ismini tutan string turunde parametre bakiye : Musterinin hesabinda halihazirdaki bakiyeyi gosteren float tipinde parametre. """ def __init__(self, isim, bakiye=0.0): """Girilen isim ile ve baslangic bakiyesi olarak sifiri koyan musteriyi olusturur.""" self.isim = isim self.bakiye = bakiye def paraCek(self, tutar): """Hesaptan ilgili tutarin cekilmesinin ardindan yeni bakiyeyi doner.""" if tutar > self.bakiye: raise RuntimeError('Bakiye yetersiz.') self.bakiye -= tutar self.bilgiGoster() return self.bakiye def paraYatir(self, tutar): """Hesaba ilgili tutarin yatirilmasinin ardindan yeni bakiyeyi doner..""" self.bakiye += tutar self.bilgiGoster() return self.bakiye def bilgiGoster(self): """Ilgili musterinin ismini ve hesap bakiyesini ekrana basar..""" print(self.isim + " isimli musteriye ait bakiye >> " + str(self.bakiye) + " TL'dir.") musteri1 = Musteri('Ibrahim Ozturk', 500.0) musteri1.paraCek(100.0)
Her ne kadar self Python acisindan ozel bir karsiligi olmasa da Python programcilari arasinda yazili olmayan yerlesik bir kural gibidir. Self sinif icerisinde metotlara, parametrelere ulasmak icin siklikla kullanilabilinir.
musteri1 = Musteri('Ibrahim Ozturk', 500.0)
Ornegin, bu satir ile Musteri sininifin gerceklenmis hali olan musteri1 nesnesi olusturulmus olmaktadir. Ilgili hesaptan para cekmek icin ise
musteri1.paraCek(100.0)
kullanilacaktir. Cekimin ardindan ekrana son bakiye sinif icerisindeki baska bir metodu cagirarak saglanmaktadir.
self.bilgiGoster()
Self paramatresi ile ise ilgili sinifa ait metotlari ya da parametreleri kullanacaginiza isaret edersiniz. Bu satir aslinda bir nevi Musteri.bilgiGoster() gibi birseydir.
Diger yandan self.isim ve self.bakiye ile de sinif icerisindeki global degiskenlere tum metotlar icerisinden erisim saglanmaktadir.
Ozetle bu kisa yazimizda self parametresine cok genel bir bakis ile orneklemeye ve kullanim yerlerinden birini gostermeye calistim. Eger sorulariniz olursa asagiya yorum olarak birakarak aktarabilirsiniz.
Keywords : python, programlama, self, nesne, sinif, self keyword, self sozcugu, kelimesi, oop programlama,
5 sene ago ·
Hocam merhabalar,bir endüstri mühendisinin yazılım ve bilişim alanlarına yönelmesini ne kadar doğru buluyorsunuz?
5 sene ago ·
Merhabalar Mehmet Emre,
Bolum bazinda bir ayrima gitmen kesinlikle kisitlayici ve varolanlara baktigimizda pek de dogru olmayan bir bakis acisi. Su bolum suna rezerve diye bugunun ve gelecegin mesleklerinde kesinlikle soylenemeyecek sozlerden. Kaldi ki Endustri Muhendisligi’nin ozellikle Data Mining/Ergonomi/Istatistik/Karar verme surecleri taraflariyla ilgili dersleri ve altyapilari var. Sadece bu konular dahi ozellikle benim ilgilendigim Makina Ogrenmesi ve Yapay Zeka taraflarindaki yazilim ve sistem gelistirme sureclerinde cok degerli. Ozetle emek ve zaman harcamaya hazir oldugun surece kesinlikle bolum bir engel degil.
iyi calismalar diliyorum simdiden
5 sene ago ·
hocam merhabalar, yazılıma yeni merak sarmış biri olarak size bir şey danışmak istiyorum. iot ile ilgilenmek istiyorum ve yaptığım araştırmalarda arduino nun iot için iyi bir başlangıç olacağı sonucuna vardım. daha sonra arduino için biraz alt yapı gerektiğini fark ettim bu amaçl da python ve C++ a başladım. bunlarda ilerlediğime inanıyorum ama arduino ya nasıl başlayacığıma ve iot ye nasıl geçeceğime dair kafamda birçok soru var. sizin öneriniz ne olur? teşekkür ederim.
5 sene ago ·
Merhabalar Aras,
Bazı durumları/kavramlari (ozellikle IoT soruna cevap) cok dert etmeden daha cok zaman, ama dah cok zaman (!) harcamani oneririm. IoTs kavramı her ne kadar yeni paketlenmis bir kavram olsa da senin ugrastigin tum gomulu sistemler IoT icin zaten bir alt kume olusturacaktir. Dolayisiyla IoT tarafina zaten giris yapmis durumdasin lakin Arduino tarafindan bir an once kurtulup veya oralari atlayip daha iyi seviye islemci, denetleyici ve platformlarla mesgul olmani oneririm. Python ve C++ guzel secimler, devam…
iyi calismalar dilerim