Mövzumuzun əvvəlində göstərdik ki, siniflər elan olunarkən sahələr (dəyişənlər) ilə yanaşı metodlar (funksiyalar) da təyin edilir. Bu metodlardan daha sonra sinfin nümayəndələri vasitəsilə çağırılaraq istifadə olunur. Bundan başqa, sinfin özü üçün təyin edilən metodlar da vardır. Bunlar staticmethod və classmethod kimi təyin olunan metodlardır.
staticmethod
Metod staticmethod kimi təyin edilirsə, bu zaman self parametri verilmir:
class Personal:
count = 0
def __init__(self, name, pos):
self.name = name
self.pos = pos
print("{0} {1} vəzifəsinə qəbul edildi".
format(self.name, self.pos))
Personal.count += 1
def pers_num():
print("Personal sayı: {0}".format(Personal.count))
pers_num = staticmethod(pers_num)
p1 = Personal("Kərim Tahiroğlu", "müdir")
Personal.pers_num()
p2 = Personal("Murad Talıblı", "menecer")
Personal.pers_num()
Yuxarıdakı proqram kodunda biz sinif daxilində pers_num() adlı metodu təyin edib onu staticmethod edirik. Bundan sonra bu metod sinfin özü vasitəsilə çağırılır.
Metodları staticmethod kimi təyin etmək üçün dekoratordan da istifadə edilə bilər:
@staticmethod
def pers_num():
print("Personal sayı: {0}".format(Personal.count))
classmethod
Siniflər üçün metodlar classmethod kimi də təyin oluna bilər. Bu zaman funksiyanın ilk parametri cls adlı parametr olur. Sinif bu metodu çağırarkən cls parametri onun özünü bildirir:
class Personal:
count = 0
def __init__(self, name, pos):
self.name = name
self.pos = pos
print("{0} {1} vəzifəsinə qəbul edildi".
format(self.name, self.pos))
Personal.count += 1
def pers_num(cls):
print("Personal sayı: {0}".format(Personal.count))
pers_num = classmethod(pers_num)
p1 = Personal("Kərim Tahiroğlu", "müdir")
Personal.pers_num()
p2 = Personal("Murad Talıblı", "menecer")
Personal.pers_num()
Yuxarıdakı proqram kodunda biz sinif daxilində pers_num() adlı metodu müəyyənləşdirib onu classmethod edirik. Bundan sonra bu metod sinfin özü vasitəsilə çağırılır.
Metodları classmethod kimi müəyyənləşdirmək üçün dekoratordan da istifadə edilə bilər:
@classmethod
def pers_num(cls):
print("Personal sayı: {0}".format(Personal.count))

“staticmethod və classmethod” üçün bir şərh
Şərh üçün bağlıdır.