CodeGym /Kurslar /Python SELF AZ /Sınıflar və obyektlərin yaradılması

Sınıflar və obyektlərin yaradılması

Python SELF AZ
Səviyyə , Dərs
Mövcuddur

3.1 Sınıfın yaradılması

Python-da siniflərin yaradılması - obyekt yönümlü proqramlaşdırmanın (OYP) vacib hissəsidir. Siniflər yeni məlumat növlərinin yaradılmasına imkan verir, hansılar ki, öz atributlarına və metodlarına sahib ola bilərlər. Gəlin Python-da siniflərin yaradılmasının əsas konseptlərini və nümunələrini nəzərdən keçirək.

Əsas anlayışlar

  • Sinif: obyektlərin yaradılması üçün şablon. Sinif, həmin sinifin obyektlərinə aid olacaq atributları və metodları müəyyən edir.
  • Obyekt: sinifin nümunəsi. Obyekt, sinifdə müəyyən olunmuş bütün atributlara və metodlara malikdir.
  • Atribut: sinif və ya obyektlə bağlı dəyişən.
  • Metod: sinif və ya obyektlə bağlı funksiya.

Atributlar əslində obyektin və ya sinifin daxili dəyişənləridir. Metodlar isə sinif daxilində müəyyən edilmiş funksiyalardır. Bu terminlər OYP-dən gəlib və funksiyalar və dəyişənlərlə yanaşı istifadə olunur.

Yeni sinif elan etmək (yaratmaq) üçün class açar sözü istifadə olunur. Bu əməliyyatın ümumi sintaksisi belədir:


class SinifAdi:
    dəyişən1 = deyer1
    dəyişənN = deyerN
          
    def funksiya1(self):
        funksiyanın kodu
            
    def funksiyaM(self):
        funksiyanın kodu

Əsasən, deyə bilərik ki, sinif — kiçik bir proqramdır (dəyişənlər + funksiyalar), hansı ki, ayrı bir sahədə yerləşdirilmişdir — SinifAdi.

Sinifi yaratdıqdan sonra həmin sinifin obyektlərini (nümunələrini) yarada bilərsiniz. Bu kod daha da sadə görünür:


dəyişənX = SinifAdi()

Vacibdir! Python-da dəyişən və metod adlarını kiçik hərflərlə yazmaq tövsiyə olunur. Sinif adları isə böyük hərflərlə yazılır. Həmçinin, sinif adlarının yazılmasında alt cizgi işarəsi istifadə olunmur. Əgər sinif adı bir neçə sözdən ibarətdirsə, hər bir söz böyük hərflə yazılır.

Sinifin/obyektin dəyişəninə müraciət etmək istəyirsinizsə, bu kod adətən belə görünür:


dəyişənX.dəyişən1 = 10
dəyişənX.funksiyaM()       

Ancaq burada bəzi nüanslar var, hansılara ki, daha sonra…

3.2 Obyektlə iş

Həm sinif, həm də sinifin nümunəsi (sinf obyekti) obyektlərdir, ona görə də hər ikisinin öz dəyişənləri və metodları ola bilər.

İki növ dəyişən mövcuddur:

  • Sinf atributu/Dəyişəni/Sahəsi (class property)
  • Obyekt atributu/Dəyişəni/Sahəsi (object property)

Və tam üç növ metod var:

  • Sinf metodu/Funksiyası (class method)
  • Obyekt metodu/Funksiyası (instance method)
  • Statik metod (static method)

Metodlar bəyan edilmə üsuluna və çağırılma üsuluna görə fərqlənir.

Obyekt metodları

Obyekt metodunu bəyan edərkən birinci məcburi parametr — self ötürmək lazımdır. Metod çağırıldıqda bu parametrə obyekt (instance) haqqında istinad ötürülür.


class MyClass:

    def instance_method(self):
        print(type(self))  # <class 'MyClass'>
                   

my_object = MyClass()
my_object.instance_method()
        

Yuxarıdakı nümunədə, instance_method() funksiyası işləməyə başlayanda self parametrinə my_object obyektinə istinad ötürülüb.

Sinf metodları

Sinf metodunu bəyan edərkən də birinci məcburi parametr — cls ötürmək lazımdır. Metod çağırıldıqda bu parametrə sinifə istinad (class object) ötürülür. Həmçinin sinf metodu classmethod dekoratoru ilə işarələnməlidir, aşağıdakı nümunədə olduğu kimi:


class MyClass:
    def instance_method(self):
        print(type(self))  # <class 'MyClass'>
        
    @classmethod
    def class_method(cls):
        print(type(cls))  # <class 'type'>
                   

my_object = MyClass()
my_object.instance_method()
MyClass.class_method()
        

Yuxarıdakı nümunədə, class_method() funksiyası işləməyə başlayanda cls parametrinə MyClass sinifinə istinad ötürülüb.

Statik metod

Statik metod bəyan edərkən ora heç bir şey ötürməyə ehtiyac yoxdur, lakin o, həmçinin sinifin daxili məlumatlarına müraciət edə bilməyəcək. Metod staticmethod dekoratoru ilə işarələnməlidir, aşağıdakı nümunədə olduğu kimi:


class MyClass:
    def instance_method(self):
        print(type(self))  # <class 'MyClass'>
        
    @classmethod
    def class_method(cls):
        print(type(cls))  # <class 'type'>
        
    @staticmethod
    def static_method():
        return "Bu metod nümunə və ya sinifdən asılı deyil"
                   
my_object = MyClass()
my_object.instance_method()
MyClass.class_method()
MyClass.static_method() 
        

Statik metod sinif metoduna çox oxşar şəkildə çağırılır, lakin ora nə obyektə istinad, nə də sinifə istinad ötürülmür.

3.3 Sinif dəyişənləri

Sinif dəyişənləri

Sinifin dəyişənini (atributunu) elan etmək üçün onu sadəcə sinif daxilində istənilən yerdə elan etmək lazımdır. Adətən bu işin əvvəlində, sinif metodlarının elanından əvvəl edilir. Məsələn:


class MyClass:
    attribute = "Mən sinif atributuyam"
        
    @classmethod
    def class_method(cls):
        print(cls.attribute)  # Mən sinif atributuyam
                  
my_object = MyClass()
MyClass.class_method()

Əgər sinif dəyişənin (atributunun) dəyərini oxumaq və ya dəyərini yazmaq istəyirsinizsə, onda cls obyektindən istifadə edin.

Əslində, sinif dəyişəninə sinifin adı ilə də müraciət etmək olar:


class MyClass:
    attribute = "Mən sinif atributuyam"
        
    @classmethod
    def class_method(cls):
        print(MyClass.attribute)  # Mən sinif atributuyam
                  
my_object = MyClass()

print(MyClass.attribute)  # Mən sinif atributuyam

Obyektin dəyişənləri/sahələri

Obyektin dəyişənləri (instance) — self obyektinin sahələridir. Siz sadəcə onlarla self.name vasitəsilə işləyirsiniz. Məhz buna görə self obyekti hər bir obyekt metoduna ötürülür.

Nümunə:


class MyClass:
    attribute = "Mən sinif atributuyam"
        
    def set_name(self, name):
        self.name = name
        
    def print_name(self):
        print(self.name)    
                 
my_object = MyClass()
my_object.set_name("name adlı obyekt sahəsi") 
my_object.print_name()  # "name adlı obyekt sahəsi"
        

Hər dəfə bir obyekt metodu çağırdığınızda, birinci parametr olaraq (self), metodu çağırdığınız obyektə keçid rolunda ötürülür. Müxtəlif obyekt metodları bu obyektlərin ümumi məlumatlarını self obyektindən istifadə edərək əldə edə bilərlər.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION