Siniflər, Obyektlər, Atrubutlar

   Bu dərsimizdə siniflər, obyektlər və atributlardan bəhs edəcəyik.

Siniflər

Siniflərin elan olunması

   Yeni bir sinif aşağıdakı kimi elan edilir:

class Sinif:
    atributlar

   Burada class açar sözü sinfi təyin etmək üçün istifadə olunur, Sinif isə bu sinfə verilən addır. Sinfin gövdəsində də atributlar, yəni sinifin sahə və metodları elan edilir.

   Gəlin ən sadə formada Kvadrat adlı yeni bir sinif meydana gətirək:

class Kvadrat:
    pass

   Biz burada sinfin gövdəsində hələ heç bir atribut elan etmirik, lakin bu bölməni boş da buraxmaq olmaz. Odur ki, burada pass operatorundan istifadə etdik. Az sonra biz Kvadrat sinfini işə yarar hala gətirəcəyik.

Obyektlər

Nümayəndənin (obyektin) meydana gətirilməsi

  İndi isə Kvadrat sinfinin kv adlı bir nümayəndəsini meydana gətirək:

kv = Kvadrat()

   Gördüyünüz kimi biz Kvadrat sinfinə mənsub kv obyektini düzəltmiş olduq. Buraya qədər izah olunanları IDLE mühitində və ya skriptdə yazaraq nəzərdən keçirin:

>>> class Kvadrat:
        pass

>>> kv = Kvadrat()
>>> type(kv)
<class '__main__.Kvadrat'>
>>> print(kv)
<__main__.Kvadrat object at 0x105600c88> 
>>>

   Yuxarıdakı proqram kodunda Kvadrat sinfi elan edildikdən sonra bu sinifdən olan kv obyekti meydana gətirilir. Bundan sonra yoxlamaq üçün həmin obyektin tipi müəyyən edilir. Ekrana onun __main__ modulunda hazırlanmış Kvadrat sinfinin bir nümayəndəsi olduğu haqda məlumat çıxır. Bundan başqa kv obyektini print() funksiyası ilə çapa verdikdə onun yaddaşdakı ünvanını da görmək mümkündür.

Atributlar

Sahə və metodlar

   Qeyd edildiyi kimi obyekt yönümlü proqramlaşdırma verilənlər və funksionallığı obyekt daxilində birləşdirməyə imkan verir. Sinif elan olunarkən biz onun atributlarını, yəni sahələr (dəyişənlər) və metodlarını (funksiyalar) da təyin edirik. Bu atributlar daha sonra həmin sinfin obyektləri (nümayəndələri) tərəfindən istifadə olunur.

Sinif dəyişəni

   Sinfin bütün nümayəndələri (obyektlər) tərəfindən paylaşılan dəyişən (sahə) sinif dəyişəni adlanır. Sinif dəyişənləri sinif daxilində, lakin sinfin metodları xaricində elan olunurlar.

Nümayəndə dəyişəni

   Metod daxilində elan olunan və yalnız cari nümayəndəyə aid olan dəyişən nümayəndə dəyişəni adlanır.

   Sahələr dəyişənlər kimi onlara qiymət mənsub edilərək elan edilirlər. Metodlar isə funksiyalar kimi təyin olunurlar. Lakin onların adi funksiyalardan fərqi ilk parametrlərinin self adlı parametr olmasıdır. Obyektlər mənsub olduqları sinfin metodlarını çağırarkən self parametrinə hər hansı bir qiymət verilmir. Bunu Python özü edir və self parametri ona müraciət edən konkret nümayəndənin (obyektin) özünü bildirir. Əslində bu parametrə başqa ad da vermək olar, lakin self hər kəs tərəfindən qəbul olunmuş bir addır və ənənəyə sadiq qalmaq məsləhət görülür.

   İndi isə gəlin Kvadrat sinfinə sahə və metodlar əlavə edərək bir az genişləndirək:

class Kvadrat:
    adef = "Kvadrat - bütün tərəfləri 
           bərabər olan dördbucaqlıdır." 
    def k_perim(self, a):
        return 4*a
    def k_area(self, a):
        return a*a 

kv = Kvadrat()

print(Kvadrat.adef)
a = int(input("Kvadratın tərəfini daxil edin: ")) 
print("Kvadratın perimetri:",kv.k_perim(a)) 
print("Kvadratın sahəsi:",kv.k_area(a))

   Gördüyünüz kimi biz əvvəlcə Kvadrat sinfini sahə və metodları ilə bərabər təyin etdik. Bundan sonra bu sinifdən olan kv nümayəndəsini meydana gətirib bu obyekt ilə sinifdəki metodları çağırdıq. Bir məqama diqqət yetirin ki, adef sahəsi burada sinif dəyişənidir. Yuxarıdakı proqram kodunu skriptdə yazıb icra edin və nəticəni nəzərdən keçirin.

   Sinifdə təyin olunan metodlara müraciəti aşağıdakı formada da həyata keçirmək olardı:

print("Kvadratın perimetri:", Kvadrat().k_perim(a))
print("Kvadratın sahəsi:", Kvadrat().k_area(a))

   Biz burada Kvadrat sinfinin metodlarını elə onun özü vasitəsilə çağırmış oluruq.