Python Sınıf Örneği

Python'da yeni bir şeyler öğrenmek için sınıfların nasıl oluşturulduğuna dair örnek yaptım. Bir metin dosyasında bulunan sahaları tab karakteriyle ayrılmış olan öğrenci bilgilerini (her satırda bir öğrenci bilgisi olacak şekilde) okuyup Ogrenci sınıfı şeklinde örnekler oluşturan ve bu örnekleri ekrana basan bir proje yaptım.

Aşağıda bu proje için yazmış olduğum sınıfları açıklamalarıyla inceleyebilirsiniz. Java'da yazabileceğimden daha az kod yazdığım bir gerçek. Metin hallerini en alttaki bağlantıdan indirebilirsiniz.

Metin Dosyası Yapısı (ogrenciler.txt)(sahalar \t - tab - karakteriyle ayrılmıştır)

1    Ali Veli Kirkdokuzelli    4    1998
2    Suphi Suphan    3    1999
3    Mustafa Canveren    2    2000
4    Ahmet Bitiveren    1    2001

Ogrenci sınıfı (Ogrenci.py):

#Ogrenci bilgilerini tuttugumuz sinif
class Ogrenci:
    #Yeni ogrenci yaratmak icin ilgili bilgilerini girmek gerekiyor
    #__init__ bu sinifin yapicisi oluyor
    def __init__(self, numara,isim,sinif,girisYili):
        #Basina __ ekleyince private degisken oluyor
        self.__isim = isim
        self.__numara = numara
        self.__sinif = sinif
        self.__girisYili = girisYili

    #Ogrenci bilgileri metin olarak donduren metod
    def toString(self):
        return self.__numara+' '+self.__isim+' '+self.__sinif+' '+self.__girisYili

OgrenciAraclar sınıfı (OgrenciAraclar.py):

from Ogrenci import *
#Bu metodun amaci parametre olarak adi verilen dosyayi acmak
#ve icerisindeki ogrenci bilgilerini bir dizi veri yapisina aktarmaktir
class OgrenciAraclar:
    def ogrencileriOku(self,dosyaAdi):
        #Dosyayi okumak icin aciyoruz
        f=open(dosyaAdi,'r')
        #Dosyadaki tum satirlari okuyoruz
        satirlar =f.readlines()
        #Ogrenci listesini yaratiyoruz
        ogrenciler = []
        #Dosyadan okudugumuz her satir icin
        for ogrenciBilgisi in satirlar:
            #Satirdaki ogrenci bilgisinden ogrenci nesnesini olusturup
            #listemize ekliyoruz
            ogrenciler.append(self.__ogrenciUret(ogrenciBilgisi))
        #ogrenci listemizi donduruyoruz
        return ogrenciler

    #Bu metodun amaci string olarak verilen ogrenci bilgisinden
    #Ogrenci sinifi ornegini olusturup dondurmektir
    def __ogrenciUret(self,ogrenciBilgisi):
        #String icerisindeki satir sonu karakterini yokediyoruz ve bosluklari kaldiriyoruz
        ogrenciBilgisi = ogrenciBilgisi.replace('\n',' ').strip()
        #Ogrenci bilgisi stringini saha parcalarina ayiriyoruz
        tokenler = ogrenciBilgisi.split('\t')
        #yeni ogrenci nesnesini tokenlerden olusturup donduruyoruz
        return Ogrenci(tokenler[0],tokenler[1],tokenler[2],tokenler[3])

AnaProgram sınıfı (AnaProgram.py):

#OgrenciAraclar icerisindeki tum siniflari kullanacagiz
from OgrenciAraclar import *
#Yukaridaki metodu cagirip deniyoruz
ogrenciAraclar = OgrenciAraclar()
ogrenciler = ogrenciAraclar.ogrencileriOku('ogrenciler.txt');
#Okunan ogrenci bilgilerini ekrana yaziyoruz
for ogrenci in ogrenciler:
    print ogrenci.toString()


Bu kaynak kodları sınıf ismini kullanarak ilgili *.py dosyasına yazın (yazılmışını alttaki bağlantıdan indirebilirsiniz), öğrenci bilgilerini ogrenciler.txt dosyasına yazın ve tüm dosyaları aynı dizinde toplayın. python AnaProgram.py komutunu komut satırında girerek projeyi çalıştırabilirsiniz.

Kaynak kodlar için tıklayabilirsiniz.

Not: Biçimlendirme için http://formatmysourcecode.blogspot.com/ kullanıldı.

6 yorum:

Adsız dedi ki...

kodları aynen derliyorum fakat no module named Ogrenci hatasını sürekli veriyor. pythonu yeni öğreniyorum yardımcı olur musunuz sebebi nedir

T. E. Kalaycı dedi ki...

Merhaba,

Yukarıdaki ayrı ayrı yazdığım kodların herbirini sınıf ismiyle aynı *.py dosyasına koyup, metin dosyasını da ogrenciler.txt dosyasına yazın ve bütün bu dosyaları aynı dizine yerleştirin. Sonrasında python AnaProgram.py dediğinizde çalışacaktır.

Ayrıca http://rapidshare.com/files/319697618/pythonSinif.zip adresinden bahsettiğim şekilde hazırlanmış dosyaları indirebilirsiniz. Siz muhtemelen Ogrenci.py dosyasını aynı dizine koymayı unuttunuz.

Adsız dedi ki...

linkte sorun var sanırım indiremedim yenileyebilir misiniz

T. E. Kalaycı dedi ki...

Merhaba,

İki indirme bağlantısı daha ekledim. Posta adresiniz olsa oraya da gönderebilirim? Posta adresime profil sayfamdan erişebilirsiniz.

asiBenlik dedi ki...

Şu kodları ve linki tekrar yenilermisiniz.
Tam bana lazım olan birşey di yardımcı olursanız sevinirim.

T. E. Kalaycı dedi ki...

Merhaba,

Yazıya indirebileceğiniz bir bağlantı eklenmiştir.