Class Kemige Dayaninca :)

Uzun zamandir su OOP dir class dir , self dir , __init__ dir , constructer , inheritance , instance  derken bir turlu ilgilenememistim , simdi bir kod incelemesi sirasinda ihtiyac oldu , iyikide olmus, bir yerden baslamak gerekiyordu.

Burada class nedir, oop nedirden bahsetmeyecegim , sanki eristigimiz bir foknsiyon gibi class a erismek , self kullanimi ve constructer ornegi olacak.

Oncelikle dokumanlari okurken belki yanlis bir baslangic olabilir ama python da eski ve yeni version class tanimlamasi gibi birsey var. Yeni version dedigimiz class i yaratmak icin artik varsayili olarak inheritance yapmak gerekiyor.

Inheritance aslinda Windows kullanicilarininda bildigi gibi ustten ilgili dosya haklarini almanin class uyarlamasi gibi birsey, burada haklari almiyorsunuzda degerleri veya attribute leri aliyorsunuz , bir nevi klonlama , kopyalamada diyebiliriz.

En basitinden class ornegi ;

class Eskiversionclass:
    # pass burada ne yazicagimizi bilmedigimizden kod hata vermesin diye
    # kullanilan placeholder
    pass

class Yeniversion(object):
    pass

Simdir burada once __init__ e bir goz atalim , aslinda __init__ bir constructer veya constructer method’u degil , yani diyemeyiz ki __init__ == constructer .

Biraz class’dan uzaklasalim , diyelim bir python paketi yaratmak istiyorsunuz, ki python paketi == Dizin_Adi ve icersinde moduller barindirir, ornegin ;

vahric:self_class(proje dosyalarinin oldugu dizin) vahricmuhtaryan$ ls -Rt

benimpaketim(klasor) file1.py

./benimpaketim:

buisiyap.py(module) suisiyap.py(module__init__.py(mutlaka olmasi gerekir)

Eger python kodunuzda “from benimpaketim import buisiyap” dediginizde onceliklebenimpaketim” klasorundeki __init__.py dosyasi calistirilacak ve daha sonra buisiyap.py dosyasi/modulu yuklenecektir.

Simdi buradan yola cikarak class ile beraber kullanilacak __init__ koddaki ilk calistirilacak sey veya seyler olacak , bununla beraber anlamini biraz daha yogunlastirir isek ilgili class’dan bir instance/obje yaratilmasini saglayacak bunu yaparkende eger ilgili class icin bir takim degerler/attribute ler set edilecek ise onlarida yapmis olacak bu haliyle __init__ constructer olarak is gorecek diyebiliriz.

Bu arada constructer nedir dersek ; 

  • Constructer class’a ait bir obje yaratildiginda otomatik olarak cagrilir
  • Constructer
    • Veritabanlarina baglanmak
    • Cookie set etmek
    • ilk degerlerin atanmasinda kullanilirlar

__init__

Burada artik __init__ / constructer ne oldugunu biliyoruz, simdi self olayini ornek ile ogrenelim ama cok basit ve cok kolay bir sekile self attirbute lerin global olmasini saglayacak.


class Deneme:

    def __init__(self):
        '''
        Constructor
        '''
        adi = "Vahric"
        yasi = 37

instance1 = Deneme()

print instance1.adi

/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7 /Users/vahricmuhtaryan/PycharmProjects/self_class/file3.py
Traceback (most recent call last):
File “/Users/vahricmuhtaryan/PycharmProjects/self_class/file3.py”, line 12, in <module>
print instance1.adi
AttributeError: Deneme instance has no attribute ‘adi’

Process finished with exit code 1

Ilk satirda “Deneme” adli bir class yarattik , sonra __init__ method u ile “adi” ve “yas” attribute lerini yarattik. Instance1 adinda bir degiskene “Deneme()” classini esitleyerek bir instance yarattik ve adi adli attribute u cagirmaya calsitik fakat hata aldik.

Yukaridaki kodu asagidaki gibi guncelledigimizde herseyin duzgun calistigini goreceksiniz


class Deneme:

    def __init__(self):
        '''
        Constructor
        '''
        self.adi = "Vahric"
        self.Yasi = 37

instance1 = Deneme()

print instance1.adi
print instance1.Yasi

Farkli bir ornek ve __dict__ method u


class Eskiversionclass:
    # pass burada ne yazicagimizi bilmedigimizden kod hata vermesin diye
    # kullanilan placeholder
    def  __init__(self,isim,soyad):
        self.isim = isim
        self.soyad = soyad
        self.aciklama = "Bir GS olarak BJK basarilar dilerim 11 Nisan 2016"

class Yeniversion(object):
    pass

a = Eskiversionclass("Vahric","Muhtaryan")

print a.__dict__
print self.aciklama

/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7 /Users/vahricmuhtaryan/PycharmProjects/self_class/file1.py
Muhtaryan
{‘soyad’: ‘Muhtaryan’, ‘isim’: ‘Vahric’}

Process finished with exit code 0

Yukarda gordugunuz gibi instance yaratirken ilgili degerleride girdik ve __init__ ona gore yaratti objeleri , __dict__ e bize instance uyelerini listeledi (soyad,isim) gibi

Burada eger sadece key leri listelemek isterseniz ;

print a.__dict__.keys()

Burada eger sadece degerleri listelemek isterseniz ;
print a.__dict__.values()

Bir iki sey daha eklemek gerekir ise ; 

Inheritance dan basetmistik, simdi bunun hakkinda iki ornek yapalim .

Inheritance Ornek 1 ;


class Eskiversionclass:
    # pass burada ne yazicagimizi bilmedigimizden kod hata vermesin diye
    # kullanilan placeholder
    def  __init__(self,isim,soyad):
        self.isim = isim
        self.soyad = soyad
        self.aciklama = "Bir GS olarak BJK basarilar dilerim 11 Nisan 2016"

# Dikkat ederseniz -Yeniversion- class'ini -Eskiversionclass- dan urettik
class Yeniversion(Eskiversionclass):
    pass

a = Yeniversion("Vahric","Muhtaryan")

print a.isim

Inheritance Ornek 2 ;


class Eskiversionclass:
    # pass burada ne yazicagimizi bilmedigimizden kod hata vermesin diye
    # kullanilan placeholder
    def  __init__(self,isim,soyad):
        self.isim = isim
        self.soyad = soyad
        self.aciklama = "Bir GS olarak BJK basarilar dilerim 11 Nisan 2016"

# Dikkat ederseniz -Yeniversion- class'ini -Eskiversionclass- dan urettik
class Yeniversion(Eskiversionclass):
    def __init__(self,yas):
        self.yas = yas

a = Yeniversion(23)

print a.isim

# Programi calistirdiginizda burada patlayacak
# Cunku yas diye yeni bir attr ekleyecegiz derken eskilerini sildi🙂 

Inheritance Ornek 3 ;


class Eskiversionclass:
    # pass burada ne yazicagimizi bilmedigimizden kod hata vermesin diye
    # kullanilan placeholder
    def  __init__(self,isim,soyad):
        self.isim = isim
        self.soyad = soyad
        self.aciklama = "Bir GS olarak BJK basarilar dilerim 11 Nisan 2016"

# Dikkat ederseniz -Yeniversion- class'ini -Eskiversionclass- dan urettik
class Yeniversion(Eskiversionclass):
    def __init__(self,isim,soyad,yas):
        Eskiversionclass.__init__(self,isim,soyad)
        self.yas = yas

a = Yeniversion("V","M",23)
print a.isim
print a.yas

# Iste bu oldu !🙂 

Daha cok sey var geriye kalan ama baslangic benim icin yeterli …
VM

Posted on 12/04/2016, in Python and tagged , , , , , , , , . Bookmark the permalink. Leave a comment.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: