Python – Nesne Tabanlı Programlama (Nesneye Yönelik Programlama)

Programlama dillerindeki genel amaç 1 kez yazılan kodların tekrar tekrar kullanılabilmesidir.

Mesela değişkenleri kullanmamızın nedeni bir kez yazdığımız bir değeri çeşitli yerlerde tekrar tekrar kullanabilmektedir.

Nesne Tabanlı Programlama’ da gerçek dünyayı taklit etmeye çalışırız.

Gerçek dünyada da nesneler vardır. (araba, insan, kalem vb.)

Yazılımda da yine nesneler vardır.

Gerçek dünyada nesnelerin özellikleri(nitelikleri) vardır(mesela arabanın rengi, insanın boyu) yine yazılım da da bu geçerlidir.

Gerçek dünyada da nesnelerin fonksiyonları(metotları) vardır. (mesela araba gidebilir, insan yazı yazabilir)

Class(Sınıf) Nedir?

Bir mühendis olduğunuzu düşünün ve bir bina yapacaksınız.

Binayı bina ile ilgili çizilmiş olan plana bakarak yaparız.

Burada bina nesne, mavi renkli plan kağıdı ise class (sınıf) dır.

Bu kağıda bakarak birden fazla bina yapabiliriz.

Yazılım dünyasında da nesneleri oluşturmadan önce sınıfları (taslakları) oluşturmamız gerekmektedir.

Aslında python da her şey bir nesnedir.

print(dir(str))

Python ile Sınıf Oluşturma

class Insan:
   pass

Yukarıda python ile Insan adında bir sınıf oluşturduk.

Sınıftan nesne oluşturmak için (örnek oluşturmak)

class Insan:
   pass

ahmet=Insan()
ayse=Insan()
class Apartman:
   pass

lale_apartmani=Apartman()
gunes_apartmani=Apartman()

Örneklere(nesnelere) Ait Özellikler (Nitelikler) ve Metotlar

class Insan:
   def __init__(self):
      self.adi=""
      self.soyadi=""
      self.yasi=""

   def yazi_yaz(self):
      print(self.adi,"yazı yazıyor")

   def yuru(self):
      print(self.adi,"yürüyor")

insan1=Insan()
insan1.adi="ahmet"
insan1.yasi=44
insan1.yazi_yaz()
insan1.yuru()

Yukarıda öncelilkle Insan adında bir sınıf tanımlıyoruz.

__init__(self) bu fonksiyon nesne ilk oluştuğunda çalışır. Kurucu fonksiyondur.

self parametresi zorunludur. Bu parametre aracılığıyla sınıf içerisindeki özelliklere ulaşabiliyoruz.

Başka Bir Örnek

class MeyveSepeti():

    def __init__(self):
        self.icindekiler = []

    def meyve_ekle(self,adi):
        self.icindekiler.append(adi)

    def meyveleri_goruntule(self):
        for x in self.icindekiler:
            print(x)


sari_sepet=MeyveSepeti()
sari_sepet.meyve_ekle("armut")
sari_sepet.meyve_ekle("elma")
sari_sepet.meyveleri_goruntule()
class MeyveSepeti():

    def __init__(self):
        self.icindekiler = []

    def meyve_ekle(self,adi):
        self.icindekiler.append(adi)

    def meyveleri_goruntule(self):
        for x in self.icindekiler:
            print(x)


def meyve_kontrol():
   sari_sepet=MeyveSepeti()
   sari_sepet.meyve_ekle("elma")

if __name__ == "__main__":
   meyve_kontrol()

Buradaki if __name__ == “__main__” anlamı bu dosya eğer doğrudan çağrıldıysa (python meyvesepeti.py) aşağıdaki meyve_kontrol() sınıfını çağır.

class Insan():

   def __init__(self,yil):
        self.dogum_yili=yil

   def __yasi_hesapla(self):
         return 2021-self.dogum_yili

   def yasi_goster(self):
      return self.__yasi_hesapla()


ahmet=Insan(yil=1985)
yas=ahmet.yasi_goster()
print(yas)

MİRAS ALMA (INHERITANCE)

class Person:
  def __init__(self, fname, lname):
    self.firstname = fname
    self.lastname = lname

  def printname(self):
    print(self.firstname, self.lastname)


x = Person("John", "Doe")
x.printname()
class Student(Person):
  pass
x = Student("Mike", "Olsen")
x.printname()
class Student(Person):
  def __init__(self, fname, lname):
    Person.__init__(self, fname, lname)
class Student(Person):
  def __init__(self, fname, lname):
    super().__init__(fname, lname)
class Student(Person):
  def __init__(self, fname, lname):
    super().__init__(fname, lname)
    self.graduationyear = 2019
class Student(Person):
  def __init__(self, fname, lname, year):
    super().__init__(fname, lname)
    self.graduationyear = year

x = Student("Mike", "Olsen", 2019)
class Student(Person):
  def __init__(self, fname, lname, year):
    super().__init__(fname, lname)
    self.graduationyear = year

  def welcome(self):
    print("Welcome", self.firstname, self.lastname, "to the class of", self.graduationyear)

Python İzinler – public, private, protected

Python ile bir özelliği veya metodu public, private, veya protected olarak ayarlayaliriz.

public dediğimizde bu sınıfın özelliğine her yerden ulaşabiliriz anlamanı gelir. Varsayılan olarak public dir.

private dediğimizde bu sınıfın özelliğine sadece sınıf içinde ulaşabiliriz anlamına gelir. (__ ile yapılır)

protected dediğimizde bu sınıfın özelliğine sadece türetilen sınıflarda ulaşabiliriz anlamına gelir. (_ ile yapılır. )

class Araba:
    def __init__(self):
        print ("Motor Çalıştı")
        self.adi = "corolla" #public - genel
        self.__marka = "toyota" #private - özel
        self._model = 1999 #protected - korumalı
araba_a = Araba()
print(araba_a.adi)

Bu kod çalışır. Çünkü adi public olarak tanımlanmıştır.

araba_a = Araba()
print(araba_a.marka)

Bu kod çalışmaz. Çünkü marka private olarak belirtilmiştir.

Yayınlayan

Ahmet KADAK

Bilgisayar Öğretmeni & Bilgisayar Mühendisi

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir