Pythonda statik usullar
Pythonda statik usullar Mundarija: 1. Pythonda statik usullar nima 2. Pythonda statik usulni aniqlang 3. Misol: @staticmethod Decorator yordamida statik usul yarating 4. Statik usulning afzalliklari 5. staticmethod() funktsiyasi
Pythonda statik usullar nima Statik usul, yakka holda vazifani bajaradigan umumiy yordamchi usuldir . Python- dagi statik usullar Java yoki C++ da topilganlarga o'xshaydi. Statik usul sinf ob'ektiga emas, balki sinfga bog'langan . Shuning uchun biz uni sinf nomidan foydalanib chaqirishimiz mumkin. Statik usul sinf va misol o'zgaruvchilarigaself kirish huquqiga ega emas, chunki u va kabi yashirin birinchi argumentni olmaydi cls. Shuning uchun u ob'ekt yoki sinf holatini o'zgartira olmaydi . Sinf usulini sinf ClassName.method_name() ob'ekti yordamida ham, foydalanib ham chaqirish mumkin. class Employee: @staticmethod def sample(x): print('Inside static method', x) # call static method Employee.sample(10) # can be called using object emp = Employee() emp.sample(10) Yugurish Pythonda statik usulni aniqlang Biz sinfda yaratgan har qanday usul avtomatik ravishda misol usuli sifatida yaratiladi . @staticmethod Biz Python-ga bu dekorator yoki staticmethod() funktsiyadan foydalangan holda statik usul ekanligini aniq aytishimiz kerak . Statik usullar sinf ichida aniqlanadi va u oddiy funktsiyani belgilashga juda o'xshaydi . Statik usulni e'lon qilish uchun ushbu idiomadan foydalaning: class C: @staticmethod def f(arg1, arg2, ...): ...
Misol: Dekorator yordamida statik usul @staticmethodyaratish Usulni statik usul qilish uchun @staticmethodusul ta'rifidan oldin dekoratorni qo'shing. Dekorator @staticmethod- bu usulni statik usul sifatida e'lon qilish uchun Python-da o'rnatilgan funksiya dekoratori. Bu bizning funktsiyamiz aniqlangandan keyin baholanadigan ifodadir. gather_requirement()Ushbu misolda biz loyiha nomini qabul qiladigan va ushbu loyiha doirasida bajarish uchun barcha talablarni qaytaradigan statik usul yaratamiz Statik usullar usullarning alohida holatidir. Ba'zan siz sinfga tegishli kodni yozasiz, lekin u ob'ektning o'zidan umuman foydalanmaydi. self Bu foydali usul va uning ishlashini yakunlash uchun ob'ekt (parametr) kerak emas . Shunday qilib, biz uni statik usul deb e'lon qilamiz. Bundan tashqari, biz uni sinfning boshqa usulidan chaqirishimiz mumkin. class Employee(object): def __init__(self, name, salary, project_name): self.name = name self.salary = salary self.project_name = project_name @staticmethod def gather_requirement(project_name): if project_name == 'ABC Project': requirement = ['task_1', 'task_2', 'task_3'] else: requirement = ['task_1'] return requirement # instance method def work(self): # call static method from instance method requirement = self.gather_requirement(self.project_name)
for task in requirement: print('Completed', task) emp = Employee('Kelly', 12000, 'ABC Project') emp.work() Yugurish Chiqish : Tugallangan vazifa_1 Bajarildi vazifa_2 Bajarildi vazifa_3 Statik usulning afzalliklari Bu erda statik usul quyidagi afzalliklarga ega. Kamroq xotirani iste'mol qilish : misol usullari ham ob'ektdir va ularni yaratish qimmatga tushadi. Statik usulga ega bo'lish buni oldini oladi. Faraz qilaylik, sizda o'nta xodim ob'ekti bor va agar siz misol usuligather_requirement() sifatida yaratsangiz, Python ushbu usulning o'n nusxasini (har bir ob'ekt uchun alohida) yaratishi kerak, bu esa ko'proq xotirani sarflaydi. Boshqa tomondan, statik usul har bir sinfda faqat bitta nusxaga ega. kelly = Employee('Kelly', 12000, 'ABC Project') jessa = Employee('Jessa', 7000, 'XYZ Project') # false # because seperate copy of instance method is created for each object print(kelly.work is jessa.work) # True # because only one copy is created # kelly and jess objects share the same methods print(kelly.gather_requirement is jessa.gather_requirement) # True print(kelly.gather_requirement is Employee.gather_requirement) Yordamchi dastur funktsiyalarini yozish uchun : Statik usullar cheklangan foydalanishga ega, chunki ular ob'ekt atributlariga ( misol o'zgaruvchilari ) va sinf
atributlariga ( sinf o'zgaruvchilari ) kirish imkoniga ega emaslar. Biroq, ular bir turni boshqasiga o'tkazish kabi yordamchi dasturlarda foydali bo'lishi mumkin. Taqdim etilgan parametrlar ishlash uchun etarli. O'qish qobiliyati : @staticmethodUsulning yuqori qismidagi ni ko'rib, biz usul ob'ekt holatiga yoki sinf holatiga bog'liq emasligini bilamiz. staticmethod()Funktsiya _ Ba'zi kodlar statik usulni belgilashning eski usulidan foydalanishi mumkin staticmethod(), bu esa dekorator emas, balki funksiya sifatida ishlatilishi mumkin. Agar siz Python-ning eski versiyalarini (2.2 va 2.3) qo'llab-quvvatlashingiz kerak bo'lsa, faqat staticmethod()statik usulni aniqlash uchun funktsiyadan foydalanishingiz kerak. @staticmethodAks holda, dekorativdan foydalanish tavsiya etiladi . Sintaksis : staticmethod(function) function: Bu statik usul sifatida aylantirmoqchi bo'lgan usulning nomi. U aylantirilgan statik usulni qaytaradi. Misol : class Employee: def sample(x): print('Inside static method', x) # convert to static method Employee.sample = staticmethod(Employee.sample) # call static method Employee.sample(10) Yugurish Yondashuv staticmethod()sinf tanasidan funksiyaga havola kerak bo'lganda foydali bo'ladi va siz misol usuliga avtomatik o'zgartirishdan qochmoqchi bo'lsangiz. Boshqa usuldan statik usulni chaqiring Keling, xuddi shu sinfning boshqa statik usulidan statik usulni qanday chaqirishni ko'rib chiqaylik. Bu erda biz statik usulni sinf usulidan ajratamiz.